python - 如何在两个数据框中查找匹配项

标签 python pandas dataframe list jupyter-notebook

我有两个数据框 df 和 df1。我想在 df1 的第 0 行到第 5 行中查找匹配项 (df),并且只返回匹配的值和范围。 例如下面的例子

import collections
import numpy as np
import pandas as pd

df = pd.DataFrame([[2],
                [23],
                [14],
                [33],
                [35],
                [26]], 
                columns = ['Col1'])


df1 = pd.DataFrame([[1,2,4,5,6,8,-19],
                [5,6,20,22,23,34,50],
                [8,12,13,34,45,46,23],
                [9,10,14,29,32,33,-10],
                [1,22,13,23,33,35,2],
                [1,6,7,8,9,10,6],
                [0,2,3,5,6,8,23]], 
                columns = ['Num1','Num2','Num3','Num4','Num5','Num6','Range'])

我想要这样的结果。

result = pd.DataFrame([[2,-19],
                [2,23],
                [23,50],
                [23,2],
                [14,-10],
                [33,-10],
                [33,2],
                [35,2]], 
                columns = ['Match','Range'])

最佳答案

代码:

df2 = df1.melt(id_vars='Range', value_vars=['Num1', 'Num2', 'Num3', 'Num4', 'Num5', 'Num6']) #reshape for easy filter
result = df2[df2['value'].isin(df['Col1'])] # rows based filter
result = result.rename(columns={'value': 'Match'})
print(result[['Match', 'Range']])

输出:

    Match  Range
7       2    -19
13      2     23
17     14    -10
25     23      2
29     23     50
32     33      2
38     33    -10
39     35      2

关于python - 如何在两个数据框中查找匹配项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/77538654/

相关文章:

python - 如何对一个复数进行四舍五入?

python - 如何正确覆盖文件?

python - Pandas:以唯一值为条件的连接

python - 循环问题的 Twitter 数据框架

R:根据降序总和对数据框中的列名称重新排序

python - 在数据框中成对排列条目序列

Python:使用位置参数之前的默认参数调用函数

python - 使用 scipy 确定 "bottleneck"图像区域

python - 识别重复值并向其附加唯一字符串

python - 如何在 Python 中找到与某个项目最频繁的配对