使用 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
像diff
和pct_change
这样的函数不是agg,它会返回与原始dataframe具有相同index
的值,对于 count
, mean
, sum
它们是agg,返回值和groupby
键作为索引
关于python - 为什么 groupby 操作的行为不同,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61810108/