繁体   English   中英

Pandas 列上的 groupby() 和 agg() 方法混淆

[英]Pandas groupby() and agg() method confusion on columns

我可以检查一下有什么区别吗

df[['column1', 'column2']].groupby('column1').agg(['mean', 'count'])

df[['column1', 'column2']].groupby('column1').agg({'column2': 'mean', 'column2': 'count'})

在第一个示例中,对不在groupby中的column2执行meancount

在第二个示例中,逻辑相同,但我在agg中明确提到了column2

为什么我看不到两者相同的结果?

TLDR

第二条语句的问题必须归因于覆盖该列。


至少有三种方法可以执行此声明。

首先让我们构建一个测试数据集:

import pandas as pd
from seaborn import load_dataset

df_tips = load_dataset('tips')

df_tips.head()
声明 1:与您的第一个 wy 相同
df_tips[['sex','size']].groupby(['sex']).agg(['mean','count'])

Output:

            size      
            mean count
sex                   
Male    2.630573   157
Female  2.459770    87

具有多索引列 header 大小和级别 = 1 的 dataframe 这两个聚合。

语句 2:在字典中使用“大小”的聚合列表
df_tips[['sex','size']].groupby(['sex']).agg({'size':['mean','count']})

Output(同上)

            size      
            mean count
sex                   
Male    2.630573   157
Female  2.459770    87
语句 3:使用命名聚合
df_tips[['sex','size']].groupby(['sex']).agg(mean_size=('size','mean'),count_size=('size','count'))

Output:

        mean_size  count_size
sex                          
Male     2.630573         157
Female   2.459770          87

这给出了一个 dataframe,其中包含一个您自己命名的“展平”列 header,但是该名称不得包含空格或特殊字符。

不正确的方法是你的第二种方法
df_tips[['sex','size']].groupby(['sex']).agg({'size':'mean','size':'count'})

输出:

        size
sex         
Male     157
Female    87

这里发生的事情是你得到两列,一个用于每个聚合,但列 header 是相同的“大小”,因此在这种情况下,第一次迭代被第二次“计数”覆盖。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM