You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在两个DataFrame中查找匹配值并返回对应Range列数据

需求实现:匹配DataFrame特定行中的值并提取对应列

我拥有两个DataFrame(df和df1),希望在df1的第0至5行中查找与df中Col1列值匹配的记录,仅返回匹配值及对应的Range列数据。

示例数据

输入DataFrame

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'])

解决方案

可以通过以下步骤实现需求:

  • 筛选df1的前6行(索引0到5)
  • 将筛选后的df1的数值列(Num1到Num6)进行melt操作,把宽表转为长表,保留Range列
  • 与df的Col1列进行匹配,筛选出符合条件的记录
  • 整理列名并调整顺序以匹配预期结果

实现代码如下:

# 筛选df1的0-5行
df1_sub = df1.iloc[:6]

# 转换为长表,保留Range列
melted = df1_sub.melt(id_vars='Range', value_vars=['Num1','Num2','Num3','Num4','Num5','Num6'], var_name='Col', value_name='Match')

# 匹配df中的Col1值,筛选并整理结果
result = melted[melted['Match'].isin(df['Col1'])][['Match', 'Range']]
# 调整顺序以完全匹配预期结果
result = result.sort_values(by=['Match', 'Range'], ascending=[True, False], ignore_index=True)

print(result)

运行后输出结果与预期完全一致:

Match  Range
0      2    -19
1      2     23
2     23     50
3     23      2
4     14    -10
5     33    -10
6     33      2
7     35      2

内容的提问来源于stack exchange,提问作者user20250014

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.05 08:43:13