【问题标题】:Pandas combine multiple pivot tablesPandas 组合了多个数据透视表
【发布时间】: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

【问题讨论】:

    标签: python pandas dataframe pivot-table pandas-groupby


    【解决方案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
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2018-08-12
        • 1970-01-01
        • 2021-01-20
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-03-29
        相关资源
        最近更新 更多