合并多个数据框熊猫

我尝试将多个新的dataFrames合并到一个主框架中。假设主数据框:


      key1           key2

0   0.365803    0.259112

1   0.086869    0.589834

2   0.269619    0.183644

3   0.755826    0.045187

4   0.204009    0.669371

我尝试将以下两个数据集合并到主要数据集“

新数据1 ”中:


        key1    key2    new feature

0   0.365803    0.259112    info1

新数据2:


        key1    key2    new feature

0   0.204009    0.669371    info2

预期结果:


       key1       key2  new feature

0   0.365803    0.259112    info1

1   0.776945    0.780978    NaN

2   0.275891    0.114998    NaN

3   0.667057    0.373029    NaN

4   0.204009    0.669371    info2

我试过的


test = test.merge(data1, left_on=['key1', 'key2'], right_on=['key1', 'key2'], how='left')

test = test.merge(data2, left_on=['key1', 'key2'], right_on=['key1', 'key2'], how='left')

第一个效果很好,但第二个效果不好,我得到的结果是:


        key1    key2    new feature_x   new feature_y

0   0.365803    0.259112    info1      NaN

1   0.776945    0.780978    NaN        NaN

2   0.275891    0.114998    NaN        NaN

3   0.667057    0.373029    NaN        NaN

4   0.204009    0.669371    NaN       info2

谢谢你的帮助!


手掌心
浏览 163回答 3
3回答

aluckdog

首先append或concat两者DataFrame在一起,然后merge:dat = pd.concat([data1, data2], ignore_index=True)或者:dat = data1.append(data2, ignore_index=True)print (dat)       key1      key2 new feature0  0.365803  0.259112       info11  0.204009  0.669371       info2#if same joined columns names better is only on parameterdf = test.merge(dat, on=['key1', 'key2'], how='left')print (df)       key1      key2 new feature0  0.365803  0.259112       info11  0.086869  0.589834         NaN2  0.269619  0.183644         NaN3  0.755826  0.045187         NaN4  0.204009  0.669371       info2

胡说叔叔

您可以pd.DataFrame.update改用:# create new column and set indexres = test.assign(newfeature=None).set_index(['key1', 'key2'])# update with new data sequentiallyres.update(data1.set_index(['key1', 'key2']))res.update(data2.set_index(['key1', 'key2']))# reset index to recover columnsres = res.reset_index()print(res)       key1      key2 newfeature0  0.365803  0.259112      info11  0.086869  0.589834       None2  0.269619  0.183644       None3  0.755826  0.045187       None4  0.204009  0.669371      info2

哈士奇WWW

您还可以将数据帧设置为相同的索引并使用简单 locdf  = df.set_index(["key1", "key2"])df2 = df2.set_index(["key1", "key2"])然后df.loc[:, "new_feature"] = df2['new_feature']
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python