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

如何在Pandas中为DataFrame列内列表的每个元素追加对应列字符串?

如何向量化实现DataFrame列表列元素追加对应字符串

嘿,我懂你想避开低效的循环,用更优雅的向量化方式搞定这个需求——把df['a']里的字符串追加到df['c']每个列表元素的末尾对吧?你之前试的cat方法路子不对,因为cat是用来处理字符串Series拼接的,没法直接操作列表里的元素。给你两个靠谱的解决方案:

首先先还原你的示例DataFrame,方便演示:

import pandas as pd

df = pd.DataFrame({
    'a': ['d', 'f', 'g'],
    'b': [1, 2, 3],
    'c': [['f', 'h'], ['u', 'v'], ['i', 'o']]
})

方案1:简洁高效的apply写法

这个写法比手动写for循环优雅得多,而且pandas的apply内部做了优化,效率不错:

df['d'] = df.apply(lambda row: [s + row['a'] for s in row['c']], axis=1)

它的逻辑很直接:按行遍历DataFrame,每一行里把c列的每个字符串和a列的字符串拼接,生成新列表后赋值给d列。

方案2:纯向量化的explode+groupby方案

如果你的数据量很大,这个纯向量化的方法效率会更高,完全避开行级操作:

# 第一步:把c列的列表展开成单行对应一个元素
exploded_df = df.explode('c')
# 第二步:给每个展开后的字符串拼接a列的对应值
exploded_df['d'] = exploded_df['c'] + exploded_df['a']
# 第三步:按原索引分组,把拼接后的字符串重新聚合成列表
df['d'] = exploded_df.groupby(exploded_df.index)['d'].agg(list)

两种方案运行后都能得到你想要的结果:

a  b          c          d
0  d  1  ['f', 'h']  ['fd', 'hd']
1  f  2  ['u', 'v']  ['uf', 'vf']
2  g  3  ['i', 'o']  ['ig', 'og']

补充一句:你之前用的df['c'].cat(df['a'],axis=0)之所以不行,是因为df['c']是存储列表的Series,cat方法只能处理字符串类型的Series拼接,没法识别列表里的元素,所以才会失败~

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.11 07:54:30