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

Pandas如何通过键匹配行的字典选取df指定值生成拼接语句

字典匹配行标识+动态选列生成格式化字段方案

测试数据构造

先复现示例用到的DataFrame和映射字典:

import pandas as pd

# 构造目标DataFrame
a=['a','b','c','d']
b=['the','fox','the','then']
c=['quick','jumps','lazy','barks']
d=['brown','over','dog','loudly']
df=pd.DataFrame(zip(a,b,c,d),columns=['indexcol','col1','col2','col3'])

# 构造映射字典:键与indexcol列值一一对应,值为当前行需要选取的列名列表
keys=['a','b','c','d']
vals=[]
vals.append(['col1','col3'])
vals.append(['col1','col2'])
vals.append(['col1','col2','col3'])
vals.append(['col2','col3'])
newdict = {k: v for k, v in zip(keys, vals)}

核心实现

逻辑非常直接:逐行读取indexcol的值,到字典里匹配当前行需要取的列集合,按要求格式拼接列名和对应值,最后用|分隔即可。apply写法可读性最高,后续调整规则也方便:

def concat_format_str(row):
    # 取出当前行需要拼接的列列表
    target_cols = newdict[row['indexcol']]
    # 逐个生成字段片段
    field_segs = [f"{col} is '{row[col]}'" for col in target_cols]
    # 拼接成最终字符串
    return ' | '.join(field_segs)

# 为df新增结果列
df['formatted_result'] = df.apply(concat_format_str, axis=1)

运行结果

最终生成的结果列各值如下:

  • indexcol='a'行:col1 is 'the' | col3 is 'brown'
  • indexcol='b'行:col1 is 'fox' | col2 is 'jumps'
  • indexcol='c'行:col1 is 'the' | col2 is 'lazy' | col3 is 'dog'
  • indexcol='d'行:col2 is 'barks' | col3 is 'loudly'

如果处理百万行以上的大数据集,可以改用向量化写法优化性能;常规十万行以内的数据量用上面的apply写法完全够用,维护成本最低。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.31 21:45:38