Pandas 组合了多个数据透视表

Posted

技术标签:

【中文标题】Pandas 组合了多个数据透视表【英文标题】:Pandas combine multiple pivot tables 【发布时间】:2020-06-05 00:46:00 【问题描述】:

假设我在下面有df1piv1piv2

df1 = pd.DataFrame('R': [1, 2], 'S': ['s1', 's2'], 'G1': ['g1a', 'g1b'], 'G2': ['g2a', 'g2b'])

df1
    R   S   G1  G2
0   1   s1  g1a g2a
1   2   s2  g1b g2b

piv1 = df1.pivot_table(index=(['S']), columns=(['G1']), aggfunc=('R': 'mean'))

piv1
        R
G1  g1a g1b
S       
s1  1.0 NaN
s2  NaN 2.0

piv2 = df1.pivot_table(index=(['S']), columns=(['G2']), aggfunc=('R': 'mean'))

piv2
        R
G2  g2a g2b
S       
s1  1.0 NaN
s2  NaN 2.0

我正在尝试制作piv3,而不是piv1piv2,如下所示。有任何想法吗?理想情况下,我想直接从df1 创建piv3(即不需要创建piv1piv2 然后将它们组合起来)。

piv3
S   g1a  g1b  g2a  g2b
s1  1.0  NaN  1.0  NaN
s2  NaN  2.0  NaN  2.0

【问题讨论】:

【参考方案1】:

df.meltpivot_table

df1.melt(['S','R']).pivot_table(index='S',columns='value',values='R').rename_axis(None)

value  g1a  g1b  g2a  g2b
s1     1.0  NaN  1.0  NaN
s2     NaN  2.0  NaN  2.0

【讨论】:

有没有办法去掉索引列标题value,让它变成空白? @CHRD 你可以在最后链接.rename_axis(None,axis=1)【参考方案2】:

IIUC

s=df1.melt(['R','S']).groupby(['S','value']).R.mean().unstack()
Out[63]: 
value  g1a  g1b  g2a  g2b
S                        
s1     1.0  NaN  1.0  NaN
s2     NaN  2.0  NaN  2.0

【讨论】:

【参考方案3】:

可能不是最优雅的答案:

piv3 = piv1.copy()
piv3[piv2.columns] = piv2

Out[17]: 
      R               
G1  g1a  g1b  g2a  g2b
S                     
s1  1.0  NaN  1.0  NaN
s2  NaN  2.0  NaN  2.0

【讨论】:

以上是关于Pandas 组合了多个数据透视表的主要内容,如果未能解决你的问题,请参考以下文章

数据分析—一文看懂数据透视表(Excel&Pandas-pivot_table实现)

Python:一次包含重复值的多个列的 Pandas 数据透视表

如何在 Pandas 中的超大数据框上创建数据透视表

Excle数据透视表如何创建非共享缓存的数据透视表

具有多索引的 Pandas 子数据透视表和总数据透视表

Pandas:编写一个包含所有列的数据透视表以表现出色