首页 > 解决方案 > 重塑数据框 pandas

问题描述

我有:

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

我尝试在熊猫中重塑数据框,但它有点不同

标签: pandasreshape

解决方案


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

推荐阅读