python - 如何在另一个数据框中找到一个数据框的行?
问题描述
我有两个熊猫数据框df1
和df2
. 我需要在 中选择行的索引df1
,其(特定)列值包含在df2
.
这是我的代码:
selected_rows = []
for i, rowi in df1.iterrows():
for j, rowj in df2.iterrows():
if (rowi['COL1']==rowj[COL1']) & (rowi['COL2']==rowj['COL2']):
selected_rows.append(i)
问题是它df1
很大,嵌套的 for.loop 需要很多时间。是否有任何替代解决方案,例如使用口罩?
样本数据:
data1 = [['Alex',10,1],['Bob',12,1],['Clarke',13,4]]
df1 = pd.DataFrame(data1,columns=['COL1','COL2','COL3'])
data2 = [['Ted',10],['Bob',12],['Clarke',13]]
df2 = pd.DataFrame(data2,columns=['COL1','COL2'])
预期的答案是:第 1 行和第 2 行(从 0 开始计数)。
解决方案
用这个:
mask = (df1[['COL1','COL2']].isin(df2[['COL1','COL2']])).all(axis=1)
df1[mask]
COL1 COL2 COL3
1 Bob 12 1
2 Clarke 13 4
selected_rows = list(df1[mask].index)
[1, 2]
推荐阅读
- r - R warning: "number of items to replace is not a multiple of replacement length"
- c# - How to catch DB constraint violation and throw UserFriendlyException?
- r - 用于应用函数并将输出作为数据帧写入 r 的 for 循环
- git - 在 Git 中,如何在指定标签处获取给定文件的哈希?
- c# - C# Lambda 表达式 - 压缩和/或逻辑
- java - 如何测试在jMock中没有调用类的所有方法?
- java - Sparql- 选择查询作为输入并将其转换为“构造”查询。?
- node.js - Kubernetes 上 Pod 中的 localhost
- r - ggplot2:关于尺寸图例
- ms-access - MS Access\Jet SQL - 员工上班和下班时间、同一张表、每位员工的全职工作总和