简体   繁体   English

Pandas 结合了多个数据透视表

[英]Pandas combine multiple pivot tables

Suppose I have df1 , piv1 , and, piv2 below:假设我在下面有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

Instead of piv1 and piv2 , I am trying to make piv3 which would look like below.而不是piv1piv2 ,我正在尝试制作piv3 ,如下所示。 Any ideas?有任何想法吗? Ideally I'd like to create piv3 directly from df1 (ie not needing to create piv1 and piv2 and then combine them).理想情况下,我想直接从df1创建piv3 (即不需要创建piv1piv2然后将它们组合起来)。

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

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

df.melt and pivot_table : 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

Probably not the most elegant answer:可能不是最优雅的答案:

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

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM