我知道这种在数据帧中查找值的索引的方法,如a列中的1和b列中的2:

index = df.index[(df['a'] == 1) & (df['b'] == 2)]

但是,如果我想要在另一个数据帧中找到一个数据帧的两列的值的索引,方法是什么?

例如,对于像df1和df2这样具有a和b列的两个数据帧,我try 了以下方法:

index = [i for i in df2.index if len(df1.index[(df1['a'] == df2.loc[i,'a']) & (df1['b'] == df2.loc[i,'b'])]) == 1]

它工作并返回一个列表,但我想找到一种更快的方法,使其结果像我提到的第一个代码一样.


对于亲爱的gtomer:

df1 = 
a         b
book      1
book      2
pen       1
eraser    3
book      4

df2 = 
a         b
pen       4
book      2
pen       8
eraser    3
book      14

我想要两个df1和df2之间的交叉点

推荐答案

执行内部-merge:

index = df1.reset_index().merge(df2)['index'].tolist()

或者,如果您有更多专栏,但只想考虑a/b:

index = df1.reset_index().merge(df2, on=['a', 'b'])['index'].tolist()

如果您可以在任一DataFrame中拥有重复的a/b组合:

index = df1.reset_index().merge(df2)['index'].unique().tolist()

输出:[1, 3]

Python相关问答推荐

根据不同列的值在收件箱中移动数据

有没有一种方法可以从python的pussompy比较结果中提取文本?

我想一列Panadas的Rashrame,这是一个URL,我保存为CSV,可以直接点击

在Django admin中自动完成相关字段筛选

将pandas导出到CSV数据,但在此之前,将日期按最小到最大排序

Python中的变量每次增加超过1

如何在FastAPI中为我上传的json文件提供索引ID?

在单次扫描中创建列表

Flash只从html表单中获取一个值

Maya Python脚本将纹理应用于所有对象,而不是选定对象

将标签移动到matplotlib饼图中楔形块的开始处

使用np.fft.fft2和cv2.dft重现相位谱.为什么结果并不相似呢?

Python OPCUA,modbus通信代码运行3小时后出现RuntimeError

我怎么才能用拉夫分拣呢?

FileNotFoundError:[WinError 2]系统找不到指定的文件:在os.listdir中查找扩展名

将标签与山脊线图对齐

组颠倒大Pandas 数据帧

为什么在安装了64位Python的64位Windows 10上以32位运行?

为什么这个正则表达式没有捕获最后一次输入?

Pandas:新列,从列表中采样,基于列值