【问题标题】:reshape a data frame pandas重塑数据框熊猫
【发布时间】:2020-09-23 08:59:48
【问题描述】:

我有:

data1=['id1','id2','id3','id1','id5']
data2=['','A','','B','']
data3=['m1','m1','m1','m2','m2']
data4=['1.22','sd','EUR','1.456','GB1234']
pd.DataFrame({'identifier':data1,'name':data2,'grp':data3,'value':data4})

    identifier  name    grp value
0   id1                 m1  1.22
1   id2         A       m1  sd
2   id3                 m1  EUR
3   id1         B       m2  1.456
4   id5                 m2  GB1234

我想要:

    id1     id2 id3 id5
A   1.220   sd  EUR 
B   1.456           GB1234

有什么建议吗? 我的真实数据有 109 个标识符、6k 个名称、1k 个组 一些注意事项:

  • 所有标识符都有可能在不同的组中是相同的
  • 最后,我希望将所有标识符作为一列,名称作为索引,值作为值

我试过df2=df.pivot(values='value',columns='field',index='ticker') 并得到错误:ValueError: Index contains duplicate entries, cannot reshap

我试过reshaping a data frame in pandas,但有点不同

【问题讨论】:

    标签: pandas reshape


    【解决方案1】:

    我认为您需要 DataFrame.pivot_table 和聚合 first,如果需要用第一个非空字符串 name 替换组,请添加 rename

    s = df.assign(name = df['name'].replace('', np.nan)).groupby('grp')['name'].first()
    
    df2=df.pivot_table(values='value',
                       columns='identifier',
                       index='grp', 
                       aggfunc='first').rename(s)
    print (df2)
    identifier    id1  id2  id3     id5
    grp                                
    A            1.22   sd  EUR     NaN
    B           1.456  NaN  NaN  GB1234
    

    【讨论】:

      猜你喜欢
      • 2017-08-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-11-03
      • 2017-04-08
      • 1970-01-01
      相关资源
      最近更新 更多