加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Python > 正文

如何在不复制列的情况下合并熊猫数据帧

发布时间:2020-12-17 17:36:39 所属栏目:Python 来源:网络整理
导读:我有以下形式的数据: frame1 = pd.DataFrame({'supplier1_match0': ['x'],'id': [1]})frame2 = pd.DataFrame({'supplier1_match0': ['2x'],'id': [2]}) 并希望将多个框架加入这样的框架: base_frame = pd.DataFrame({'id':[1,2,3]}) 我合并id并得到: merg

我有以下形式的数据:

frame1 = pd.DataFrame({'supplier1_match0': ['x'],'id': [1]})
frame2 = pd.DataFrame({'supplier1_match0': ['2x'],'id': [2]})

并希望将多个框架加入这样的框架:

base_frame = pd.DataFrame({'id':[1,2,3]})

我合并id并得到:

merged = base_frame.merge(frame1,how='left',left_on='id',right_on='id')
merged = merged.merge(frame2,right_on='id')

   id supplier1_match0_x supplier1_match0_y
0   1                  x                NaN
1   2                NaN                 2x
2   3                NaN                NaN

该列已重复,并附加了“ y”.这是我需要的:

id,supplier1_match0,...
1,x
2,2x
3,NaN

有没有简单的方法可以做到这一点?有一个类似的问题(Nested dictionary to multiindex dataframe where dictionary keys are column labels),但是数据的形状不同.请注意,我有多个供应商,并且它们具有不同数量的匹配项,因此我不能假定数据将具有“矩形”形状.提前致谢.

最佳答案
您的问题是您真的不想只合并所有内容.您需要合并第一组框架,然后合并.

import pandas as pd
import numpy as np

base_frame.merge(pd.concat([frame1,frame2]),how='left')

#   id supplier1_match0
#0   1                x
#1   2               2x
#2   3              NaN

另外,您可以定义base_frame,使其具有其他框架的所有相关列,并将id设置为索引并使用.update.这样可以确保base_frame保持相同的大小,而上面的保持不变.如果给定单元格有多个非空值,则数据将被覆盖.

base_frame = pd.DataFrame({'id':[1,3]}).assign(supplier1_match0 = np.NaN).set_index('id')

for df in [frame1,frame2]:
    base_frame.update(df.set_index('id'))

print(base_frame)

   supplier1_match0
id                 
1                 x
2                2x
3               NaN

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读