使用Python/Pandas逐行合并具有重叠数据的数据框。

4
我可以进行翻译。下面是您需要翻译的内容:

我有两个大数据框,我需要按行合并它们。这两个数据框可能有一些重叠的行。

例如:

data1
    key name               patent
    11  Alphagrep          112344
    12  Citrix             112345

data2
    Sr  name               patents
    11  Alphagrep          112344
    13  Taj                112322

我希望将这些数据帧按行合并在[Key,Sr]和[patent,patents]上。

即:如果row-data1[key]==row-data2[Sr]且row-data1[patent]==row-data2[patents],则合并,否则追加。

结果应为:

data1 + data2
    key name               patent
    11  Alphagrep          112344
    12  Citrix             112345
    13  Taj                112322

在 pandas 中应该如何做到这一点?
2个回答

5
你可以像这样做:

你可以这样做:

print data1, '\n', '\n', data2, '\n'
data2.columns = data1.columns.tolist()
data3 = pd.concat([data1, data2]).drop_duplicates()
print data3

输出:

   key       name  patent
0   11  Alphagrep  112344
1   12     Citrix  112345 

   Sr       name  patents
0  11  Alphagrep   112344
1  13        Taj   112322 

   key       name  patent
0   11  Alphagrep  112344
1   12     Citrix  112345
1   13        Taj  112322

这是一个不错的技巧来解决这个问题。然而,假设我们遇到了列不能同质化的情况(即列数不相等),那么我们该怎么办呢?是否有一种方法可以提供参数,只检查那些列呢? - user248884
@user248884,您能否发布可重现的样本数据集和所需的结果数据集?或者更好的方法是 - 开一个新问题... - MaxU - stand with Ukraine
1
好的。创建一个特定的案例并将其发布为新问题。由于此解决方案适用于现有问题,您可以接受它 :) - Mohammad Yusuf

1

set_index and combine_first

c1 = ['key', 'patent']
c2 = ['Sr', 'patents']

data1.set_index(c1) \
    .combine_first(
        data2.set_index(c2).rename_axis(c1)
    ).reset_index()

   key  patent       name
0   11  112344  Alphagrep
1   12  112345     Citrix
2   13  112322        Taj

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接