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

如何基于另一DataFrame的Age与Score列值为目标DataFrame新增列

问题与解决方案

问题背景

我有两个DataFrame:

第一个DataFrame(df1):

Age200300400
1343250
2427320

第二个DataFrame(df2):

IDAgeScore
102200
231300

需求:为df2新增一列Count,根据df2的Age和Score(Score的值对应df1的列名),从df1中匹配对应数据,最终得到如下结果:

IDAgeScoreCount
10220042
23130032

解决方案

方法1:使用DataFrame.lookup(高效直接)

import pandas as pd

# 构造示例数据
df1 = pd.DataFrame({'Age': [1, 2], '200': [34, 42], '300': [32, 73], '400': [50, 20]})
df2 = pd.DataFrame({'ID': [10, 23], 'Age': [2, 1], 'Score': [200, 300]})

# 将df2的Score转为字符串,匹配df1的列名(df1的列名是字符串类型)
df2['Score'] = df2['Score'].astype(str)

# 用lookup匹配:以df2的Age为行索引,Score为列名,从df1中取值
df2['Count'] = df1.set_index('Age').lookup(df2['Age'], df2['Score'])

print(df2)

方法2:重塑df1为长格式后合并(更易理解)

import pandas as pd

# 构造示例数据
df1 = pd.DataFrame({'Age': [1, 2], '200': [34, 42], '300': [32, 73], '400': [50, 20]})
df2 = pd.DataFrame({'ID': [10, 23], 'Age': [2, 1], 'Score': [200, 300]})

# 将df1从宽表转为长表,把列名转为Score列,对应值转为Count列
df1_melted = df1.melt(id_vars='Age', var_name='Score', value_name='Count')
# 转换Score类型为整数,匹配df2的Score类型
df1_melted['Score'] = df1_melted['Score'].astype(int)

# 根据Age和Score合并两个DataFrame
result_df = df2.merge(df1_melted, on=['Age', 'Score'], how='left')

print(result_df)

两种方法都能得到目标结果,方法1适合数据量较大的场景,效率更高;方法2逻辑更直观,便于调试和理解。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.21 17:44:13