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

如何基于另一Pandas DataFrame的值为现有DataFrame新建列

实现方案

核心思路是先提取第二个DataFrame中分类标识的首字母作为匹配键,再结合组内序号实现一一对应匹配,示例代码如下:
首先导入依赖:
import pandas as pd

步骤1:构造示例数据(可替换为自己的真实数据)

# 第一个DataFrame,存储A/B/C重复3次的分类列
df1 = pd.DataFrame({
    '分类': ['A','B','C','A','B','C','A','B','C']
    # 其余原有列直接保留即可
})

# 第二个DataFrame,索引为A1/A2/A3/B1/B2/B3/C1/C2/C3格式,存储待匹配的数值
df2 = pd.DataFrame({
    '待匹配数值': [10,20,30,40,50,60,70,80,90]
}, index=['A1','A2','A3','B1','B2','B3','C1','C2','C3'])

步骤2:生成匹配用的辅助字段

# 提取df2索引的首字母作为匹配键
df2['匹配键'] = df2.index.str[0]
# 给df1同分类下的行生成组内序号,匹配A1/A2/A3的后缀序号
df1['组内序号'] = df1.groupby('分类').cumcount() + 1
# 给df2同首字母下的行生成组内序号
df2['组内序号'] = df2.groupby('匹配键').cumcount() + 1

步骤3:关联匹配得到结果

df_result = pd.merge(
    df1,
    df2,
    left_on=['分类', '组内序号'],
    right_on=['匹配键', '组内序号'],
    how='left'
# 删除临时生成的辅助字段
).drop(columns=['匹配键', '组内序号'])

特殊场景调整

  • 如果你不需要按顺序匹配,只要同字母的所有df2值都关联到对应字母的df1行上,删除组内序号的逻辑,仅用分类和匹配键做关联即可,会自动生成笛卡尔积。
  • 如果df2的A1/B1这类标识存在于普通列而非索引中,把df2.index.str[0]替换为df2['你的标识列名'].str[0]即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 07:09:05