如何高效合并Pandas中两个Series列的对应元素生成新列?
高效拼接Pandas中两个含列表元素的Series
嘿,针对你需要高效拼接两个Series列的需求,我给你推荐一个既简单又快速的方法,特别适合处理大规模数据集!
首先明确你的场景:两个Series的每个元素都是列表,需要把对应位置的列表元素逐个拼接(比如['332', '331']和['C/A/2/3', 'C/A/2/3']变成['332C/A/2/3', '331C/A/2/3'])。
最推荐的高效方法:列表推导式 + zip
Pandas的apply方法虽然直观,但在处理大数据集时会有不少性能开销,而列表推导式是Python原生的高效操作,速度会快很多。
先看示例代码:
import pandas as pd # 构造示例数据 s1 = pd.Series([['332', '331'], ['123', '456'], ['789', '012']]) s2 = pd.Series([['C/A/2/3', 'C/A/2/3'], ['D/B/1/2', 'D/B/1/2'], ['E/C/3/4', 'E/C/3/4']]) # 高效拼接生成新列 df = pd.DataFrame({'col1': s1, 'col2': s2}) df['combined'] = [ [a + b for a, b in zip(lst1, lst2)] for lst1, lst2 in zip(df['col1'], df['col2']) ]
运行后df['combined']的结果就是你想要的:
0 [332C/A/2/3, 331C/A/2/3] 1 [123D/B/1/2, 456D/B/1/2] 2 [789E/C/3/4, 012E/C/3/4] Name: combined, dtype: object
为什么这个方法高效?
- 列表推导式是Python底层实现的循环,比Pandas的
apply少了很多中间层的开销; zip函数也是原生高效的配对工具,能快速把两个Series的元素、以及每个列表内的元素一一对应起来。
如果你的数据集非常大(比如百万级别的行),这个方法的速度优势会非常明显——你可以用%timeit分别测试列表推导式和apply版本的代码,就能直观看到差距。
备选:Pandas原生API方法
如果你更习惯Pandas的API风格,也可以用combine方法,但速度会慢一些:
df['combined'] = df['col1'].combine(df['col2'], lambda x, y: [a + b for a, b in zip(x, y)])
但还是强烈推荐列表推导式的版本,尤其是处理大规模数据的时候。
内容的提问来源于stack exchange,提问作者Sunny
相关产品推荐
相关产品推荐

