我希望从原始数据框中删除一部分数据。
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
有人可以帮我吗?高度赞赏!谢谢