如何在Pandas中为DataFrame列表列元素拼接对应列字符串?
解决方法:将DataFrame列值拼接至列表元素生成新列
我来帮你搞定这个需求!你想要把a列的字符串值,逐个拼接到c列对应行的列表每个元素后面,生成新列d对吧?下面给你两种实用的方法,比你之前尝试的方式更靠谱:
方法一:用apply快速实现(直观易读)
这种方法代码简洁,适合中小规模的数据,逻辑一目了然:
首先先构造示例DataFrame方便你测试:
import pandas as pd df = pd.DataFrame({ 'a': ['d', 'f', 'g'], 'b': [1, 2, 3], 'c': [['f', 'h'], ['u', 'v'], ['i', 'o']] })
然后执行下面的代码生成d列:
df['d'] = df.apply(lambda row: [item + row['a'] for item in row['c']], axis=1)
这里的逻辑是按行处理:对每一行,遍历c列的列表元素,把每个元素和当前行的a值拼接,最后把拼接后的元素组成新列表赋值给d列。
方法二:向量化操作(适合大数据量)
如果你的数据集很大,apply的效率可能不够,推荐用explode+groupby的向量化方案,性能更优:
# 把c列的列表拆分成单独行,保留原索引 exploded_df = df.explode('c') # 拼接c和a列的值 exploded_df['d_element'] = exploded_df['c'] + exploded_df['a'] # 按原索引分组,把拼接后的元素重新组合成列表 df['d'] = exploded_df.groupby(exploded_df.index)['d_element'].agg(list)
为什么你之前的方法没成功?
你尝试的df['c'].cat(df['a'],axis=0)用法不对,cat方法是用来拼接同类型的Series(比如都是字符串的Series),但c列是由列表组成的Series,和a列的字符串Series无法直接用cat拼接,所以会得到错误结果。
执行完上面任意一种方法后,你就能得到预期的输出:
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]
内容的提问来源于stack exchange,提问作者anjali
相关产品推荐
相关产品推荐

