我有两个数据框,我正在尝试将数据从一个df1
迁移到主df
。
它们共享一个公用密钥-我想将df1
行中的值存储到df
列中。我可以这样做。但是 df1
可以有多个行(最多5个)共享公用密钥,并且我想将每一行存储在单独的列中。
使用示例:
df
index key datacol
1 1AA data1
2 1AB data2
3 1AC data3
df1
index key newdata
1 1AA new1
2 1AB new2
3 1AB new3
4 1AB new4
5 1AC new5
6 1AC new6
输出:
index key datacol newcol1 newcol2 newcol3
1 1AA data1 new1
2 1AB data2 new2 new3 new4
3 1AC data3 new5 new6
感谢您的帮助。
答案 0 :(得分:1)
IIUC,可以做
d = df2.groupby('key', as_index=False).agg(list)
x = pd.concat([d.newdata.apply(pd.Series), d.key],1).set_index('key')
pd.merge(df.set_index('key'),x, right_index=True, left_index=True)
index datacol 0 1 2
key
1AA 1 data1 new1 NaN NaN
1AB 2 data2 new2 new3 new4
1AC 3 data3 new5 new6 NaN
答案 1 :(得分:0)
您可以先合并
newdf=df.merge(df1,how='right')
然后使用cumcount
创建帮助键,然后问题看起来像pivot
finaldf= newdf.assign(helpkey=newdf.groupby('key').cumcount()).set_index(['key','datacol','helpkey']).newdata.unstack(fill_value='')
finaldf
Out[410]:
helpkey 0 1 2
key datacol
1AA data1 new1
1AB data2 new2 new3 new4
1AC data3 new5 new6