使用pandas一次对多个列执行计算

时间:2018-05-01 14:23:46

标签: python pandas

我有一个超过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)

我想知道是否还有另一种方法可以实现同一目标?这种当前的做法很好,但需要花费大量的时间来运行,并以某种方式为某些操作产生奇怪的结果。谢谢。

enter image description here

2 个答案:

答案 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相应的调整。