python - 从另一个数据帧中删除数据帧子集无法与 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
有人可以帮我吗?高度赞赏!谢谢
解决方案
推荐阅读
- sql - Liquibase 无法为 hsql 导入更改集
- c# - 关于使用 selenium c# 的会话超时
- css - 块 chunkName [mini-css-extract-plugin] 中的 mini-css-extract-plugin 警告:
- c - 如何将此 C 程序转换为计算每行之和及其总和的函数?
- dart - 在具有高度的容器上带有图标的 Flutter TextFormField
- three.js - 使用 lineTo 和 curveTo 在 Three.js 中为线条制作动画
- ansible - Ansible 没有看到已安装的 Python 模块
- javascript - 带有javascript的esp8226
- angular - 在角度 6 中将模板插入到子组件
- java - 使用 formatDate 的 jsp 错误