如何在组内对数字和非数字数据类型求和

时间:2016-08-19 15:29:07

标签: python pandas group-by

考虑以下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

enter image description here

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()

enter image description here

但似乎只对数字列求和。什么是与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')

enter image description here

1 个答案:

答案 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