(请注意,有一个问题是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_tale呢?groupby似乎更通用。发布于 2016-09-25 06:02:49
如果我正确地理解了pivot_table(index, columns, values, aggfunc)的源代码,那么它就相当于:
df.groupby([index + columns]).agg(aggfunc).unstack(columns)+:
pivot_table()还从列轴中删除额外的多个级别(参见下面的示例)dropna参数:不包括条目全部为NaN的列演示:(我从pivot_table()的docstring源代码中获取这个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为什么不反对pivot_tale?群比似乎要普遍得多。
因为它很容易使用,而且很方便!)
https://stackoverflow.com/questions/39674876
复制相似问题