【问题标题】:How to find sum and count of a column based on a grouping condition on a Pandas dataset?如何根据 Pandas 数据集上的分组条件查找列的总和和计数?
【发布时间】:2019-09-20 18:38:36
【问题描述】:

我有一个包含 3 列的 Pandas 数据集。我需要按 ID 列分组,同时查找其他两列的总和和计数。另外,我必须忽略列“A”和“B”中的零。

数据集看起来像 -

ID   A    B  

1    0    5  
2   10    0   
2   20    0  
3    0   30   

我需要什么 -

ID   A_Count   A_Sum   B_Count   B_Sum  

1      0         0        1        5  
2      2        30        0        0  
3      0         0        1       30  

我已尝试使用一列进行此操作,但无法在最终数据集中获得两个聚合。

(df.groupby('ID').agg({'A':'sum', 'A':'count'}).reset_index().rename(columns = {'A':'A_sum', 'A': 'A_count'}))  

【问题讨论】:

标签: python pandas jupyter-notebook


【解决方案1】:

如果您不专门传递它的列,它会自行聚合 numeric 列。

由于您不想计算0,请先将它们替换为NaN

df.replace(0, np.NaN, inplace=True)

print(df)
   ID     A     B
0   1   NaN   5.0
1   2  10.0   NaN
2   2  20.0   NaN
3   3   NaN  30.0

df = df.groupby('ID').agg(['count', 'sum'])

print(df)
       A           B      
   count   sum count   sum
ID                        
1      0   0.0     1   5.0
2      2  30.0     0   0.0
3      0   0.0     1  30.0

删除多索引列

您可以使用列表推导:

df.columns = ['_'.join(col) for col in df.columns]

print(df)
    A_count  A_sum  B_count  B_sum
ID                                
1         0    0.0        1    5.0
2         2   30.0        0    0.0
3         0    0.0        1   30.0

【讨论】:

  • 在输出中我不想对零进行计数或求和。
  • 我明白了,为正确答案而编辑。请参阅有关将 0 替换为 NaN @Vjain 的说明
猜你喜欢
  • 2023-03-20
  • 1970-01-01
  • 1970-01-01
  • 2016-12-05
  • 1970-01-01
  • 2021-04-30
  • 2023-02-22
  • 1970-01-01
  • 2019-11-13
相关资源
最近更新 更多