为了账号安全,请及时绑定邮箱和手机立即绑定

合并多个数据框熊猫

合并多个数据框熊猫

手掌心 2021-03-30 13:14:36
我尝试将多个新的dataFrames合并到一个主框架中。假设主数据框:      key1           key20   0.365803    0.2591121   0.086869    0.5898342   0.269619    0.1836443   0.755826    0.0451874   0.204009    0.669371我尝试将以下两个数据集合并到主要数据集“新数据1 ”中:        key1    key2    new feature0   0.365803    0.259112    info1新数据2:        key1    key2    new feature0   0.204009    0.669371    info2预期结果:       key1       key2  new feature0   0.365803    0.259112    info11   0.776945    0.780978    NaN2   0.275891    0.114998    NaN3   0.667057    0.373029    NaN4   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_y0   0.365803    0.259112    info1      NaN1   0.776945    0.780978    NaN        NaN2   0.275891    0.114998    NaN        NaN3   0.667057    0.373029    NaN        NaN4   0.204009    0.669371    NaN       info2谢谢你的帮助!
查看完整描述

3 回答

?
aluckdog

TA贡献1847条经验 获得超7个赞

首先append或concat两者DataFrame在一起,然后merge:


dat = pd.concat([data1, data2], ignore_index=True)

或者:


dat = data1.append(data2, ignore_index=True)


print (dat)

       key1      key2 new feature

0  0.365803  0.259112       info1

1  0.204009  0.669371       info2

#if same joined columns names better is only on parameter

df = test.merge(dat, on=['key1', 'key2'], how='left')


print (df)

       key1      key2 new feature

0  0.365803  0.259112       info1

1  0.086869  0.589834         NaN

2  0.269619  0.183644         NaN

3  0.755826  0.045187         NaN

4  0.204009  0.669371       info2


查看完整回答
反对 回复 2021-04-20
?
胡说叔叔

TA贡献1804条经验 获得超8个赞

您可以pd.DataFrame.update改用:


# create new column and set index

res = test.assign(newfeature=None).set_index(['key1', 'key2'])


# update with new data sequentially

res.update(data1.set_index(['key1', 'key2']))

res.update(data2.set_index(['key1', 'key2']))


# reset index to recover columns

res = res.reset_index()


print(res)


       key1      key2 newfeature

0  0.365803  0.259112      info1

1  0.086869  0.589834       None

2  0.269619  0.183644       None

3  0.755826  0.045187       None

4  0.204009  0.669371      info2


查看完整回答
反对 回复 2021-04-20
?
哈士奇WWW

TA贡献1799条经验 获得超6个赞

您还可以将数据帧设置为相同的索引并使用简单 loc


df  = df.set_index(["key1", "key2"])

df2 = df2.set_index(["key1", "key2"])

然后


df.loc[:, "new_feature"] = df2['new_feature']


查看完整回答
反对 回复 2021-04-20
  • 3 回答
  • 0 关注
  • 159 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信