Python Pandas总结了不同列的值

时间:2013-11-19 17:07:59

标签: python lambda pandas

我正在尝试将存储在列表中的值存储在一列中,并将它们乘以存储在另一列的列表中的值。

例如,要打印每个用户的所有核心,我就这样做。

print df.groupby(['User'])['Cores'].apply(lambda x: [i for i in x]).head()

User
John                                      [64, 64, 160, 64]
Bob       [32, 32, 8, 8, 32, 32, 32, 32, 16, 16, 32, 32,...

要查看每个用户的所有时间,请执行以下操作:

print df.groupby(['User'])['Time'].apply(lambda x: [i/60.0/60.0 for i in x]).head()

User
John      [15.6908333333, 0.01, 0.503888888889, 4.581944]
Bob     [37.0177777778, 0.139166666667, 4.30916666667,...

我想取每个'Core'值并将它乘以Time输出中相应的'Hour',然后总结每个用户的值。换句话说,有这样的输出:

User      Total
John      1378.71997155344
...       

该值通过取64 * 15.6908333333 + 64 * 0.01 + 160 * 0.503888888889 + 64 * 4.581944获得。

因为我是新用户,所以在8小时过后我无法回答我自己的问题,但我相信我已经解决了这个问题。

以下是我的想法:

print df.groupby(['User']).apply(lambda x: np.sum([x.Cores.astype(float)*(x.Time.astype(float)/60.0/60.0)]))

User
John                1678.035556
Bob                 7725.688889

不确定这是否是正确的方法,所以我很感激任何输入。谢谢。

1 个答案:

答案 0 :(得分:3)

我认为有一个中间栏可能是个好主意:

df['CoresTime'] = df['Cores'] * df['Time']

现在你可以简单地使用groupby:

df.groupby('User')['CoresTime'].sum()

这比应用或使用列表显着更有效...