我正在尝试将存储在列表中的值存储在一列中,并将它们乘以存储在另一列的列表中的值。
例如,要打印每个用户的所有核心,我就这样做。
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
不确定这是否是正确的方法,所以我很感激任何输入。谢谢。
答案 0 :(得分:3)
我认为有一个中间栏可能是个好主意:
df['CoresTime'] = df['Cores'] * df['Time']
现在你可以简单地使用groupby:
df.groupby('User')['CoresTime'].sum()
这比应用或使用列表显着更有效...