Pandas组合多个数据透视表

2024-09-30 06:19:12 发布

您现在位置:Python中文网/ 问答频道 /正文

假设我在下面有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

我不想piv1piv2,而是试图制作如下所示的piv3。有什么想法吗?理想情况下,我希望直接从df1创建piv3(也就是说,不需要创建piv1piv2,然后组合它们)

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

Tags: tablenanpivotdf1s2g1g2s1
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

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

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

相关问题 更多 >

    热门问题