【问题标题】:how to create a merge between two data frames on two columns without introducing additional rows in the left one?如何在两列上的两个数据框之间创建合并,而不在左侧引入额外的行?
【发布时间】:2021-12-22 12:58:39
【问题描述】:

我有两个数据框 DF1

colA colB colC colD

DF2

colA colB colE colF

两个数据框中的前两列由相同的数量组成,但存在一些差异。 在 DF2 colA 中,假设 M 个数字,每个 M 个数字都可以具有 N 个属性,因此 colB 捕获了这些属性。实际上,DF2 中的行数是 M*N。我还必须提到 colE 和 colF 对于每个 MN 组合都是唯一的。

IN DF1 colA 有 M 个不同的可能值,但 M 个值中的每一个可能重复不同的次数 所以如果 M 贯穿 m1---mM 那么可能性的总数可以是 k1*m1 + k2*m2 + K3*m3 等等。 k_{i} 是整数。 在 colB 中,对于每个重复的 M 个不同值,可以有不同或相同的 N 值。但是,与 DF1 中的 DF2 不同,相同的 M 和 N 值可以重复(行的唯一性由 DF1​​ 中的其他列保证)。

当我使用以下合并命令在 Pandas 中加入这两个表时,我得到了额外的行(在加入中),我想知道如何避免?

pd.merge(DF1, DF2, on=['colA', 'colB'])

我想知道是否有人可以使用 pandas 提出答案,这可能比我尝试制作 DF1 中存在的 MN 组合的字典然后从 DF2 中选择列然后粘贴回 DF1 更快。

DF1

colA colB colC colD
1 A -10 -20
1 B -33 -44
1 A -22 -11
2 B 33 44

DF2

colA colB colE colF
1 A 123 456
2 B -1 -2
1 A -4 -5
2 B -7 -8

我需要的合并

colA colB colC colD colE colF
1 A -10 -20 123 456
1 B -33 -44 -1 -2
1 A -22 -11 123 456
2 B 33 44 -7 -8

感谢您抽出宝贵时间阅读。

【问题讨论】:

    标签: python pandas


    【解决方案1】:

    这对你有用吗?

    pd.concat([DF1, DF2[['colE', 'colF']]], axis=1)
    

    【讨论】:

    • 感谢 user17242583 但这似乎不起作用。我得到不正确的值
    猜你喜欢
    • 2016-05-01
    • 2020-04-21
    • 1970-01-01
    • 2020-03-31
    • 2011-06-21
    • 2018-06-16
    • 1970-01-01
    • 2018-09-04
    • 1970-01-01
    相关资源
    最近更新 更多