python - 查找具有最大匹配条目/值数量的两个数据框的列
问题描述
我有两个数据框:
dfA
Alpha Beta Gamma
1 apple bana
1 gin vodka
dfB
Teta heta hofa
1 apple bana
1 apple vodka
如何找到具有最大匹配实体数的列对?对于两列,很容易进行合并或使用集合,我需要为它编写一个 for 循环吗?
我也试过:dfA.where(dfA.values==dfB.values).notna()
这导致ValueError: Array conditional must be same shape as self
.
我想要的结果是:
Columns Nr
(Alpha, Teta) 2
(Alpha, heta) 0
(Alpha, hofa) 0
(Beta, Teta) 0
(Beta, heta) 1
(Beta, hofa) 0
(Gamma, Teta) 0
(Gamma, heta) 0
(Gamma, hofa) 2
背景:我必须检查条目是否匹配两个系统,但不幸的是系统使用不同的命名,我需要识别前导列。
解决方案
使用product
这两个columns
名称,在元组的列表理解中Series.isin
使用 count True
s测试成员资格并传递给构造函数:sum
DataFrame
from itertools import product
L = [((a, b), dfA[a].isin(dfB[b]).sum()) for a, b in product(dfA.columns, dfB.columns)]
df = pd.DataFrame(L, columns=['Columns','Nr'])
print (df)
Columns Nr
0 (Alpha, Teta) 2
1 (Alpha, heta) 0
2 (Alpha, hofa) 0
3 (Beta, Teta) 0
4 (Beta, heta) 1
5 (Beta, hofa) 0
6 (Gamma, Teta) 0
7 (Gamma, heta) 0
8 (Gamma, hofa) 2
输出中 3 列的非常相似的解决方案:
L = [(a, b, dfA[a].isin(dfB[b]).sum()) for a, b in product(dfA.columns, dfB.columns)]
df = pd.DataFrame(L, columns=['col1','col2','Nr'])
print (df)
col1 col2 Nr
0 Alpha Teta 2
1 Alpha heta 0
2 Alpha hofa 0
3 Beta Teta 0
4 Beta heta 1
5 Beta hofa 0
6 Gamma Teta 0
7 Gamma heta 0
8 Gamma hofa 2
推荐阅读
- symfony - webpack-encore .setPublicPath 相对忽略
- javascript - 如何在 vuejs 中单击按钮时打开 div 标签?
- python - ValueError:您正在尝试合并 object 和 int64 列。将类型更改为字符串但尚未解析
- java - 虽然 startActivity() 在 Android 9 中捕获错误验证类
- networking - 我的蜂窝网络的网关路由器在哪里
- python - 将数据框导出/导入为 Excel 工作表
- pytorch - PyTorch Geometric:分割训练/验证/测试以进行节点分类的功能实用程序是什么
- reactjs - 在 React 中使用带有漂亮 DND 的 `useState`
- post - POST 和范围的 MS Graph API(邮件)问题
- javascript - 为什么 ESLint 看不到 JS 文件的所有引号问题?