python - 为什么 groupby 操作的行为不同

标签 python pandas dataframe group-by

使用 pandas groupby functions 时并在 groupby 之后操作输出,我注意到某些函数在作为索引返回的内容以及如何操作方面表现不同。

假设我们有一个包含以下信息的数据框:

    Name   Type  ID
0  Book1  ebook   1
1  Book2  paper   2
2  Book3  paper   3
3  Book1  ebook   1
4  Book2  paper   2

如果我们这样做

df.groupby(["Name", "Type"]).sum()  

我们得到一个DataFrame:

             ID
Name  Type     
Book1 ebook   2
Book2 paper   4
Book3 paper   3

其中包含一个 MultiIndex,其中包含在 groupby 中使用的列:

MultiIndex([('Book1', 'ebook'),
            ('Book2', 'paper'),
            ('Book3', 'paper')],
           names=['Name', 'Type'])

还有一个名为 ID 的列。

但是如果我应用一个 size() 函数,结果是一个 Series:

Name   Type 
Book1  ebook    2
Book2  paper    2
Book3  paper    1
dtype: int64

最后,如果我执行 pct_change(),我们只会得到生成的 DataFrame 列:

    ID
0   NaN
1   NaN
2   NaN
3   0.0
4   0.0

长话短说;博士。我想知道为什么有些函数返回 Series 而有些函数返回 DataFrame,因为这让我在处理同一 DataFrame 中的不同操作时感到困惑。

最佳答案

来自文档

Size :

Returns
Series
Number of rows in each group.

对于 sum ,由于您没有为 sum 传递列,因此它将返回没有 groupby 键的数据框

df.groupby(["Name", "Type"])['ID'].sum()  # return Series

diffpct_change这样的函数不是agg,它会返回与原始dataframe具有相同index的值,对于 count , mean, sum 它们是agg,返回值和groupby 键作为索引

关于python - 为什么 groupby 操作的行为不同,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61810108/

相关文章:

python - 为什么要从这个列表的长度中减去一个?

python - 条件数据框分组

python - 是否有一种优雅的方法将别名映射到连接的数据文件中的真实实体名称?

重新组织数据框

python - 根据一列的值和另一列中列表的长度对数据框进行排序

python - 使用Python通过串口发送文件

python - mysql.connector.errors.DatabaseError : 2005 (HY000): Unknown MySQL server host 'db' (2)

python - 如何从两个点数组创建 Shapely LineString

python - 加载大对象后测量堆大小的增加

hadoop - 在 Spark 中保存有序数据框