如何展开DataFrame中的Pandas Series并去重后拆分为多行数据
实现方法
核心逻辑是先对col3的每个Series元素去重,再调用pandas的explode方法展开为多行,代码简洁高效,适合大数据量场景。
核心代码
import pandas as pd # 核心处理逻辑,df替换为你自己的DataFrame变量名 df_result = df.assign( # 对col3中的每个Series去重后排序,适配你示例的输出顺序 col3 = df['col3'].apply(lambda s: sorted(s.unique())) # 展开col3为多行,重置索引 ).explode('col3', ignore_index=True)
代码说明
- 如果你不需要对去重结果排序,要保留元素的原始出现顺序,去掉
sorted()即可,也可以将s.unique()替换为s.drop_duplicates(),二者去重效果一致 explode方法需要pandas版本≥0.25,如果你使用的是更早的版本,可使用如下兼容写法:
from itertools import chain # 先对col3去重排序 df['col3'] = df['col3'].apply(lambda s: sorted(s.unique())) # 手动展开为多行 df_result = pd.DataFrame({ col: df[col].repeat(df['col3'].str.len()) for col in df.columns.drop('col3') }).assign(col3=list(chain.from_iterable(df['col3']))).reset_index(drop=True)
输出验证
运行后df_result的输出和你要求的结构完全一致:
col1 col2 col3 0 xyz1 3.9 A 1 xyz1 3.9 B 2 xyz2 8.0 A 3 xyz2 8.0 C 4 xyz2 8.0 D
内容的提问来源于stack exchange,提问作者Yash
相关产品推荐
相关产品推荐

