我有一个df:
Id Day Name Value1 Value2 Value3 ... Value10 factor
11 1 x 1 2 3 ... 10 2
11 1 y 10 9 8 ... 1 2
11 1 z 2 2 2 ... 2 2
22 2 i 3 3 4 ... 4 3
22 2 j 0 0 1 ... 1 3
我的目标是对“值”列中的值求和,并将其乘以其因子。输出将是:
Id Day Value1 Value2 Value3 ... Value10
11 1 2*(1+10+2) 2*(2+0+2) 2*(3+8+2) 2*(10+1+2)
22 2 3*(3+0) 3*(3+0) 3*(4+1) 3*(4+1)
我的方法是按ID对它们进行分组,但后来我不想添加“Day”,我不确定处理这个问题的正确方法。
非常感谢!
答案 0 :(得分:2)
我相信你需要:
set_index
用于以后汇总sum
filter
列,列名为Value
,列数为factor
sum
reset_index
df = df.set_index(['Id','Day'])
df = df.filter(like='Value').mul(df['factor'], axis=0).sum(level=[0,1]).reset_index()
print (df)
Id Day Value1 Value2 Value3 Value10
0 11 1 26 26 26 26
1 22 2 9 9 15 15
使用list
difference
获取所有列的多个列的类似解决方案:
df = df.set_index(['Id','Day'])
cols = df.columns.difference(['factor', 'Name'])
df = df[cols].mul(df['factor'], axis=0).sum(level=[0,1]).reset_index()
print (df)
Id Day Value1 Value10 Value2 Value3
0 11 1 26 26 26 26
1 22 2 9 15 9 15