gpt4 book ai didi

python - `pd.pivot_table` 和 `pd.DataFrame.groupby` + `pd.DataFrame.unstack` 之间是否完全重叠?

转载 作者:太空狗 更新时间:2023-10-30 00:01:49 26 4
gpt4 key购买 nike

(请注意这里有一个问题 Pandas: group by and Pivot table difference ,但是这个问题是不同的。)

假设您从一个 DataFrame 开始

df = pd.DataFrame({'a': ['x'] * 2 + ['y'] * 2, 'b': [0, 1, 0, 1], 'val': range(4)})
>>> df
Out[18]:
a b val
0 x 0 0
1 x 1 1
2 y 0 2
3 y 1 3

现在假设您要创建索引a、列b、单元格中的值val,并指定要执行的操作如果结果单元格中有两个或更多值:

b  0  1
a
x 0 1
y 2 3

然后你可以通过

df.val.groupby([df.a, df.b]).sum().unstack()

或通过

pd.pivot_table(df, index='a', columns='b', values='val', aggfunc='sum')

所以在我看来,两者之间的对应关系之间存在简单的对应关系(给定一个,您几乎可以编写一个脚本将其转换为另一个)。我还想到了具有层次索引/列的更复杂的情况,但我仍然看不出有什么区别。

我错过了什么吗?

  • 是否存在可以使用一个而不是另一个来执行的操作?

  • 有没有一种操作比另一种更容易执行?

  • 如果不是,为什么不弃用 pivot_talegroupby 似乎更通用。

最佳答案

如果我正确理解了 pivot_table(index, columns, values, aggfunc) 的源代码,那么它的调整等同于:

df.groupby([index + columns]).agg(aggfunc).unstack(columns)

加上:

  • 边距(小计和总计为 @ayhan has already said )
  • pivot_table() 还从列轴中删除额外的多级(参见下面的示例)
  • 方便的 dropna 参数:不包括条目全部为 NaN 的列

演示:(我从文档字符串 [pivot_table() 的源代码] 中获取了这个 DF])

In [40]: df
Out[40]:
A B C D
0 foo one small 1
1 foo one large 2
2 foo one large 2
3 foo two small 3
4 foo two small 3
5 bar one large 4
6 bar one small 5
7 bar two small 6
8 bar two large 7

In [41]: df.pivot_table(index=['A','B'], columns='C', values='D', aggfunc=[np.sum,np.mean])
Out[41]:
sum mean
C large small large small
A B
bar one 4.0 5.0 4.0 5.0
two 7.0 6.0 7.0 6.0
foo one 4.0 1.0 2.0 1.0
two NaN 6.0 NaN 3.0

注意顶层列:D

In [42]: df.groupby(['A','B','C']).agg([np.sum, np.mean]).unstack('C')
Out[42]:
D
sum mean
C large small large small
A B
bar one 4.0 5.0 4.0 5.0
two 7.0 6.0 7.0 6.0
foo one 4.0 1.0 2.0 1.0
two NaN 6.0 NaN 3.0

why not deprecate pivot_tale? groupby seems much more general.

IMO,因为它非常易于使用且非常方便!;)

关于python - `pd.pivot_table` 和 `pd.DataFrame.groupby` + `pd.DataFrame.unstack` 之间是否完全重叠?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39674876/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com