我有一个超过100万行的大数据框。当前的df只有列X,a,b,c。我想执行一个产生新列的计算:new_a,new_b,new_c(见图片)
计算结果为:new_a = a /(X ^ 2)
我已经有办法在python中做到了:
col_list = ['a','b','c']
def new(col,X):
score = col/(X**2)
return score
new_col = ['new_a','new_b','new_c']
def calculate(df):
for i in range(len(new_col)):
df[new_col[i]] = df.apply(lambda row: new(row[col_list[i]],row['X']),axis=1)
calculate(df)
我想知道是否还有另一种方法可以实现同一目标?这种当前的做法很好,但需要花费大量的时间来运行,并以某种方式为某些操作产生奇怪的结果。谢谢。
答案 0 :(得分:2)
col_list = ['a','b','c']
df = pd.concat(
[df, df[col_list].div(df['X'] ** 2, axis=0).add_prefix('new_')], axis=1
)
df
X a b c new_a new_b new_c
0 5 3 4 5 0.120000 0.160000 0.200000
1 7 2 4 2 0.040816 0.081633 0.040816
Pandas对每一列执行索引对齐的除法,然后将结果连接起来。
答案 1 :(得分:1)
你想要/ X ^ 2还是/ X?你要求一个,但你的例子显示另一个。
for col in col_list:
new_col = 'new_' + col
df[new_col] = df[col] / (df['X']**2)
会给你你要求的东西,如果你想要的是实际的/ X相应的调整。