首页 > 解决方案 > Python Pandas groupby:A组与非A组?

问题描述

假设数据如下所示:

df = pd.DataFrame({'Group' : ['A', 'B', 'A', 'B', 'C'],
                   'Value' : [1, 4, 3, 2, 3]})

  Group Value
0     A     1
1     B     4
2     A     3
3     B     2
4     C     3

通常,当按“组”分组并获得总和时,我会得到:

df.groupby(by="Group").agg(["sum"])

Group  Value sum
    A          4
    B          6
    C          3

有没有办法获得“A组”与“非A组”,比如:

df.groupby(by="Group A vs non-Group A").agg(["sum"])

Group  Value sum
    A          4
non-A          9

感谢大家!

标签: pythonpython-3.xpandaspandas-groupby

解决方案


使用groupbyreplace

In [566]: df.groupby(
              df.Group.eq('A').replace({True: 'A', False: 'non-A'})
            )['Value'].sum().reset_index()
Out[566]:
   Group  Value
0      A      4
1  non-A      9

细节

In [567]: df.Group.eq('A').replace({True: 'A', False: 'non-A'})
Out[567]:
0        A
1    non-A
2        A
3    non-A
4    non-A
Name: Group, dtype: object

In [568]: df.groupby(df.Group.eq('A').replace({True: 'A', False: 'non-A'}))['Value'].sum()
Out[568]:
Group
A        4
non-A    9
Name: Value, dtype: int64

推荐阅读