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

基于不同长度DataFrame关联列创建新列的技术问询

解决思路与代码实现

你的需求本质是把df8中每个分类对应的唯一值映射到df3的对应行,用apply或者np.where逐个判断确实太繁琐,尤其是分类多的时候完全不高效。这里给你两种最常用的pandas解决方案,简单又靠谱:

方法一:用map做字典映射(推荐,代码最简洁)

首先把df8转换成一个「分类-值」的字典,然后直接用map方法给df3批量赋值:

# 先从df8创建映射字典:key是categories,value是First_value(cm)
category_map = df8.set_index('categories')['First_value(cm)'].to_dict()

# 给df3添加新列,自动匹配对应分类的值
df3['first_values_cm'] = df3['categories'].map(category_map)

# 如果df3里有df8不存在的分类,会出现NaN,可按需填充默认值
# df3['first_values_cm'] = df3['categories'].map(category_map).fillna(0)  # 示例填充0

方法二:用merge做左连接(适合需要保留更多df8字段的场景)

如果之后还需要用到df8的其他列,用左连接更灵活:

# 左连接:保留df3的所有行,匹配df8中相同categories的行
merged_df = pd.merge(df3, df8[['categories', 'First_value(cm)']], 
                     on='categories', how='left')

# 把匹配到的值赋值给df3的新列
df3['first_values_cm'] = merged_df['First_value(cm)']

为什么你的之前尝试不太合适?

  • apply是逐行遍历处理,数据量大的时候速度会很慢,而且代码写起来很啰嗦;
  • np.where需要逐个写df3['categories'] == '某个分类'的条件,分类多的话代码会变得非常冗长,后期维护也麻烦。

这两种方法都是pandas原生的高效操作,能完美解决你的需求,选哪种看你后续是否需要用到df8的其他字段~

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.13 09:12:00