Pandas高效合并多列表列生成新列(规避循环与逐列索引)
高效合并Pandas DataFrame每行所有列的列表生成新列
如果你需要合并DataFrame每行中所有列的列表,生成新列C,且不想手动逐列拼接或写循环,这里有两个高效方案:
方案1:使用apply结合sum(简洁直观)
直接按行处理,利用列表的sum操作实现拼接:
import pandas as pd # 原始数据 df = pd.DataFrame({'A' : [['a', 'b', 'c'], ['e', 'f', 'g','g']], 'B' : [['1', '4', 'a'], ['5', 'a']]}) # 生成新列C df['C'] = df.apply(lambda row: sum(row, []), axis=1)
这里sum(row, [])的作用是将该行所有列的列表依次拼接到空列表中,等价于手动执行row['A'] + row['B'] + ...,但无需指定列名,自动适配所有列。
方案2:使用stack+groupby(更适合大数据量)
如果数据量极大,apply的逐行操作可能不够快,可以试试Pandas的向量化操作组合:
df['C'] = df.stack().groupby(level=0).agg(list)
stack()会将所有列的列表元素展开,生成一个以原行索引和列名为多层索引的Series;groupby(level=0)按原行索引分组;agg(list)将每个分组的元素重新聚合为列表,正好对应每行合并后的结果。
验证结果
执行任意一种方案后,df的结果都会符合预期:
print(df) # 输出: # A B C # 0 [a, b, c] [1, 4, a] [a, b, c, 1, 4, a] # 1 [e, f, g, g] [5, a] [e, f, g, g, 5, a]
内容的提问来源于stack exchange,提问作者Paul Bonnard
相关产品推荐
相关产品推荐

