首页 > 解决方案 > 如何在另一个数据框中找到一个数据框的行?

问题描述

我有两个熊猫数据框df1df2. 我需要在 中选择行的索引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 开始计数)。

标签: pythonpandas

解决方案


用这个:

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]

推荐阅读