Pandas 组合了多个数据透视表
Posted
技术标签:
【中文标题】Pandas 组合了多个数据透视表【英文标题】:Pandas combine multiple pivot tables 【发布时间】:2020-06-05 00:46:00 【问题描述】:假设我在下面有df1
、piv1
和piv2
:
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
,而不是piv1
和piv2
,如下所示。有任何想法吗?理想情况下,我想直接从df1
创建piv3
(即不需要创建piv1
和piv2
然后将它们组合起来)。
piv3
S g1a g1b g2a g2b
s1 1.0 NaN 1.0 NaN
s2 NaN 2.0 NaN 2.0
【问题讨论】:
【参考方案1】:df.melt
和pivot_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实现)