重塑数据框 pandas
reshape a data frame 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
我试过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
我有:
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但有点不同
我认为您需要 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