熊猫添加子列

时间:2018-01-29 07:58:07

标签: python pandas

我有一个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”,我不确定处理这个问题的正确方法。

非常感谢!

1 个答案:

答案 0 :(得分:2)

我相信你需要:

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