如何快速实现DataFrame列元素的均匀交叉重排?
实现DataFrame列元素的均匀交叉排列
针对你提出的需求,最快的实现方式可以结合pandas.groupby和Python内置的zip函数完成,步骤如下:
步骤说明
- 分组提取元素:按列值分组,把每个类别对应的元素提取为独立列表;
- 交叉合并列表:利用
zip依次从每个类别列表中取对应位置的元素,再展平成最终序列。
代码示例
import pandas as pd # 构造示例DataFrame df = pd.DataFrame({'col': ['dl', 'ab', 'ab', 'sh', 'dl', 'sh', 'dl', 'ab', 'sh']}) # 按列值分组,生成{类别: 元素列表}的字典 grouped = {val: list(series) for val, series in df.groupby('col')} # 交叉合并三个类别列表并展平 target_list = [item for trio in zip(grouped['dl'], grouped['sh'], grouped['ab']) for item in trio] # 将结果赋值给新列 df['cross_col'] = target_list
执行后df['cross_col']的结果即为:['dl', 'sh', 'ab', 'dl', 'sh', 'ab', 'dl', 'sh', 'ab']
效率说明
groupby是pandas底层优化过的操作,分组效率极高;zip是Python内置的高效迭代工具,能快速实现多列表的按位交叉;- 整个过程无冗余循环或判断,时间复杂度为O(n),是处理这类需求的最优方案之一。
如果后续遇到不同类别元素数量不一致的场景,可以改用itertools.zip_longest处理(需填充缺失值或截断较长列表),但针对当前案例,zip完全适用。
内容的提问来源于stack exchange,提问作者abiyyu surya harry
相关产品推荐
相关产品推荐

