【问题标题】:pivot dataframe with duplicate values具有重复值的枢轴数据框
【发布时间】:2019-11-01 14:02:49
【问题描述】:

考虑以下pd.DataFrame

temp = pd.DataFrame({'label_0':[1,1,1,2,2,2],'label_1':['a','b','c',np.nan,'c','b'], 'values':[0,2,4,np.nan,8,5]})

print(temp)
        label_0 label_1 values
    0   1           a   0.0
    1   1           b   2.0
    2   1           c   4.0
    3   2          NaN  NaN
    4   2           c   8.0
    5   2           b   5.0

我想要的输出是

     label_1    1   2
  0     a      0.0  NaN
  1     b      2.0  5.0
  2     c      4.0  8.0
  3     NaN    NaN  NaN

我尝试过pd.pivot 并与pd.gropuby 争吵,但由于重复条目而无法获得所需的输出。非常感谢任何帮助。

【问题讨论】:

    标签: python pandas group-by pivot


    【解决方案1】:

    你可以先fillna 然后pivot

    temp.fillna('NaN').pivot(*temp.columns).T
    Out[251]: 
    label_0    1    2
    label_1          
    NaN      NaN  NaN
    a          0  NaN
    b          2    5
    c          4    8
    

    【讨论】:

      【解决方案2】:

      另一种方法是使用set_index和unstack:

      temp.set_index(['label_0','label_1'])['values'].unstack(0)
      

      输出:

      label_0    1    2
      label_1          
      NaN      NaN  NaN
      a        0.0  NaN
      b        2.0  5.0
      c        4.0  8.0
      

      【讨论】:

        【解决方案3】:
        d = {}
        for _0, _1, v in zip(*map(temp.get, temp)):
            d.setdefault(_1, {})[_0] = v
        
        pd.DataFrame.from_dict(d, orient='index')
        
               1    2
        a    0.0  NaN
        b    2.0  5.0
        c    4.0  8.0
        NaN  NaN  NaN
        

        pd.DataFrame.from_dict(d, orient='index').rename_axis('label_1').reset_index()
        
          label_1    1    2
        0       a  0.0  NaN
        1       b  2.0  5.0
        2       c  4.0  8.0
        3     NaN  NaN  NaN
        

        【讨论】:

        • 简直太棒了!万分感谢。你以前也帮助过我很多次。
        【解决方案4】:

        看起来像一个简单的pivot 作品:

        temp.pivot(columns='label_0', index='label_1', values='values')
        

        输出:

        label_0     1       2
        label_1         
        NaN         NaN     NaN
        a           0.0     NaN
        b           2.0     5.0
        c           4.0     8.0
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2017-04-08
          • 2017-06-10
          • 2020-12-02
          • 2020-12-27
          • 1970-01-01
          • 2013-07-07
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多