微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

重塑数据框熊猫

如何解决重塑数据框熊猫

我有

data1=['id1','id2','id3','id1','id5']
data2=['','A','','B','']
data3=['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,但这有点不同

解决方法

我认为您需要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

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。