首页 > 解决方案 > 从另一个数据帧中删除数据帧子集无法与 pandas 合并和 isin 运算符一起正常工作

问题描述

我希望从原始数据框中删除一部分数据。

Subset data: Mismatch_test_final: 141 columns, 14222 rows    
Main data: X_TNR_final: 140 columns, 132252 rows

我想要实现的示例:

X_TNR_final= pd.DataFrame({'k': ['foo', 'bar', 'baz', 'foo'],
                    'value': [1, 2, 3, 5]})
Mismatch_test_final = pd.DataFrame({'k': ['foo'],
                    'value': [5]})

leftover= df1.merge(df2,how='left',indicator=True)
answer = leftover.loc[leftover['_merge']=='left_only']

预期产出

df1:
k   value
foo  1
bar  2
baz  3
foo  5

df2:
k   value
foo   5

answer:
k   value
foo  1
bar  2
baz  3

我提到了其他线程,例如 如何在 Python 中删除数据框的子集?但这对我不起作用。

方法1

我删除了子集中的一个额外列,并使用 pandas merge with indicator=True


remaining_TNR_Test = Test_TNR_final.merge(Mismatch_test_final.drop(['TPR_1'],axis=1), how='outer',indicator=True)
remaining_TNR_Test_final = remaining_TNR_Test[remaining_TNR_Test['_merge']=='left_only']

我得到的输出的行数比预期的多,表明删除没有正确发生。

Actual output: 127794 rows, 140 columns  
Expected output: 118030 rows (132252-14222), 140 columns

方法 2:我也尝试使用 'isin' 运算符

remaining_TNR_Test_dummy=Test_TNR_final[~(Test_TNR_final.isin(Mismatch_test_final.drop(['TPR_1'],axis=1)).all(axis=1))]

当我使用这种技术时,行数保持不变。那就是没有减少发生。

Actual output: 132252 rows, 140 columns  
Expected output: 118030 rows (132252-14222), 140 columns

有人可以帮我吗?高度赞赏!谢谢

标签: pythonpandasdataframemergeisin

解决方案


推荐阅读