pandas 如何从存在于另一个数据框中的数据框中只删除一次行

li9yvcax  于 2023-03-28  发布在  其他
关注(0)|答案(1)|浏览(103)

对不起,如果我问愚蠢的问题,因为我正在努力学习。
假设我有两个这样的 Dataframe :

dataframe1 = pd.DataFrame({'col1': [1, 2, 3, 4, 2], 'col2': ['a', 'b', 'c', 'd', 'b']})
dataframe2 = pd.DataFrame({'col1': [2, 4], 'col2': ['b', 'd']})

我试过这个:

merged = pd.merge(dataframe1, dataframe2, how='outer', indicator=True)
result = merged[merged['_merge'] == 'left_only'][dataframe1.columns]

输出:

col1 col2
0     1    a
3     3    c

但是我想得到这个数据框作为结果(所以只删除其他数据框中的数量):

col1 col2
0     1    a
3     3    c
4     2    b

你能帮我吗?或者如果在不同的线程中回答,因为我找不到,请发送链接。
谢谢大家!

mqxuamgl

mqxuamgl1#

你就快到了!
merge之前使用groupby.cumcount进行重复数据消除,并遵循您的逻辑:

cols = ['col1', 'col2'] # or list(dataframe1)

merged = pd.merge(dataframe1.assign(n=dataframe1.groupby(cols).cumcount()),
                  dataframe2.assign(n=dataframe2.groupby(cols).cumcount()),
                  how='outer', indicator=True)

result = merged[merged['_merge'] == 'left_only'][dataframe1.columns]

输出:

col1 col2
0     1    a
2     3    c
4     2    b

中间体merged

col1 col2  n     _merge
0     1    a  0  left_only
1     2    b  0       both
2     3    c  0  left_only
3     4    d  0       both
4     2    b  1  left_only

相关问题