考虑以下df
df = pd.DataFrame([
['X', 'a', 0, 1],
['X', 'b', 2, 3],
['X', 'c', 4, 5],
['Y', 'a', 6, 7],
['Y', 'b', 8, 9],
['Y', 'c', 10, 11],
], columns=['One', 'Two', 'Three', 'Four'])
df
df.dtypes
One object
Two object
Three int64
Four int64
dtype: object
当我df.sum()
时,我会得到sum
对每列的内容。
df.sum()
One XXXYYY
Two abcabc
Three 30
Four 36
dtype: object
但是,我想在groupby
内执行此操作。我希望这可以工作
df.groupby('One').sum()
但似乎只对数字列求和。什么是与df.sum()
执行相同求和的便捷方式?
我希望这个结果
pd.concat([df.set_index('One').loc[i].sum() for i in ['X', 'Y']],
axis=1, keys=['X', 'Y']).T.rename_axis('One')
答案 0 :(得分:4)
使用agg
lambda
{/ 1>}可以达到理想的效果
In [6]:
df.groupby('One').agg(lambda x: x.sum())
Out[6]:
Two Three Four
One
X abc 6 9
Y abc 24 27