如何在Pandas DataFrame中根据列表长度生成重复分数列?
解决Pandas中按列表长度重复数值生成新列的问题
你的需求是给DataFrame新增一列score_repeat,其中每个元素是对应行score的数值,重复次数等于该行titles列表的元素个数。
你之前的代码错误在于,len(df['titles'])获取的是整个titles列的总行数,而非每行列表的元素数量,所以得到的是分数乘以总行数的结果,不符合预期。
方法一:逐行处理(简单直观)
使用apply按行遍历,对每行计算titles的长度后重复score:
df['score_repeat'] = df.apply(lambda row: [row['score']] * len(row['titles']), axis=1)
运行后即可得到你期望的结果:
titles score score_repeat 0 [cat, father, bakery] 43 [43, 43, 43] 1 [brick, swordsmith, park, apple] 68 [68, 68, 68, 68]
方法二:矢量化处理(高效适用于大数据集)
如果你的数据集较大,逐行apply效率较低,可以用矢量化操作实现:
# 提取每行titles列表的长度 lengths = df['titles'].str.len() # 按长度重复score列的数值 repeated_scores = df['score'].repeat(lengths) # 按原索引分组,将重复后的数值转为列表 df['score_repeat'] = repeated_scores.groupby(repeated_scores.index).agg(list)
这种方法通过Pandas的内置矢量化方法避免了循环,处理大型数据时性能更优。
内容的提问来源于stack exchange,提问作者DavidReynisson
相关产品推荐
相关产品推荐

