python - Pandas 结合两个分组依据,过滤并合并分组(计数)

标签 python pandas pandas-groupby

我有一个数据框,我需要将两个不同的 groupby 与其中一个过滤组合。

 ID     EVENT      SUCCESS
 1       PUT          Y
 2       POST         Y
 2       PUT          N
 1       DELETE       Y 

下表是我希望数据的样子。首先对 'EVENT' 计数进行分组,其次是统计每个 ID 的成功数 ('Y')

ID  PUT   POST  DELETE SUCCESS
 1   1     0       1      2
 2   1     1       0      1

我已经尝试了一些技术,我发现壁橱是两种不同的方法,它们产生以下结果

group_df = df.groupby(['ID', 'EVENT']) count_group_df = group_df.size().unstack()

对于“EVENT”计数产生以下结果

ID  PUT   POST  DELETE
 1   1     0       1      
 2   1     1       0      

对于带有过滤器的成功,我不知道我是否可以将它加入到'ID'上的第一个集合中

 df_success = df.loc[df['SUCCESS'] == 'Y', ['ID', 'SUCCESS']]
 count_group_df_2 = df_success.groupby(['ID', 'SUCCESS'])


ID  SUCCESS
1      2
2      1

我需要以某种方式组合这些吗?

此外,我还想将两个“EVENT”(例如 PUT 和 POST)的计数合并到一列中。

最佳答案

使用concat将它们合并在一起:

df1 = df.groupby(['ID', 'EVENT']).size().unstack(fill_value=0)
df_success = (df['SUCCESS'] == 'Y').groupby(df['ID']).sum().astype(int)
df = pd.concat([df1, df_success],axis=1)
print (df)
    DELETE  POST  PUT  SUCCESS
ID                            
1        1     0    1        2
2        0     1    1        1

另一种解决方案 value_counts :

df1 = df.groupby(['ID', 'EVENT']).size().unstack(fill_value=0)
df_success = df.loc[df['SUCCESS'] == 'Y', 'ID'].value_counts().rename('SUCCESS')
df = pd.concat([df1, df_success],axis=1)
print (df)
    DELETE  POST  PUT  SUCCESS
ID                            
1        1     0    1        2
2        0     1    1        1

最后可以将索引转换为列并删除列名 ID by reset_index + rename_axis :

df = df.reset_index().rename_axis(None, axis=1)
print (df)
   ID  DELETE  POST  PUT  SUCCESS
0   1       1     0    1        2
1   2       0     1    1        1

关于python - Pandas 结合两个分组依据,过滤并合并分组(计数),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44325204/

相关文章:

python - 在 Heroku 上使用 Python 构建的 webapp 构建中未加载图像

python - 在 Python 中对元组列表进行排序

Python 保存到映射共享驱动器时出错

python - 使用groupby但不创建系列

python - 对同一数据框中的分类和连续特征使用带有 fill_value 的 reindex

python - 如何旋转数据框

python - 如何根据贡献值在 pyplot 饼图中显示过滤后的图例标签?

python - 提取大于指定大小的连续值组

python - 如何使用 python pandas 分组并计算新字段?

python - Groupby 名称用所有列中的最大值替换值 pandas