熊猫-将另一个DF的多行映射到多列

时间:2018-07-25 01:21:56

标签: python pandas dataframe

我有两个数据框,我正在尝试将数据从一个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

感谢您的帮助。

2 个答案:

答案 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