我有以下数据帧:
df = pd.DataFrame({'a': [1, 2], 'b': [3, 4]}) df: a b 0 1 3 1 2 4
我有一个样本量N=5。我想使用
df.div(df.sum(axis=1), axis=0)
这可以在一行中完成吗?
要规范化并确保没有任何值大于引用,需要获取规范化值的最大值并再次规范化:
import numpy as np N = 5 # 1/np.sqrt(N) = 0.447214 df2 = df.div(df.sum(axis=1), axis=0) df2 = df2.div(df2.values.max()*np.sqrt(N))
输出:
a b 0 0.149071 0.447214 1 0.198762 0.397523
你能一行完成吗?是的,但是你应该吗?
通过两次执行相同的计算:低效
N = 5 df2 = df.div(df.sum(axis=1), axis=0).div(df.div(df.sum(axis=1), axis=0).values.max()*np.sqrt(N))
N = 5 df2 = (df2:=df.div(df.sum(axis=1), axis=0)).div(df2.values.max()*np.sqrt(N))
我会坚持这两条线