如何将Pandas分组后的名称列表拆分为最多2列?
Pandas分组拆分列的简便实现方案
原始数据构造
先构造示例DataFrame用于测试:
import pandas as pd df = pd.DataFrame({ 'Type': ['Cheese', 'Cheese', 'Cheese', 'Bread', 'Bread', 'Pepper'], 'Name': ['Mozarella', 'Cheddar', 'Pepper Jack', 'Sourdough', 'Rye', 'Green'] })
无需自定义Lambda的简便实现
利用组内序号标记+透视表的方式,完全避免自定义Lambda函数,步骤如下:
- 给每个
Type分组内的行生成从0开始的序号,对应名称的先后顺序:
df['group_seq'] = df.groupby('Type').cumcount()
- 透视表转换,将序号列转为目标列,并处理空值:
result = (df.pivot(index='Type', columns='group_seq', values='Name') .rename(columns={0: 'Name_primary', 1: 'Name_alternative'}) .fillna('') .reset_index())
最终结果
执行后得到的结果如下:
| Type | Name_primary | Name_alternative |
|---|---|---|
| Bread | Sourdough | Rye |
| Cheese | Mozarella | Cheddar |
| Pepper | Green |
方案说明
- 原表已排序,
cumcount()生成的序号正好对应名称的先后顺序,直接取前两个即可 - 透视表自动将多行转成横向结构,空值用空字符串填充符合需求
- 全程无需编写自定义Lambda逻辑,代码简洁且易读
内容的提问来源于stack exchange,提问作者newpyspark
相关产品推荐
相关产品推荐

