Pandas如何基于指定列重复值将关联唯一值从行转为多列输出
实现方案
核心逻辑是先对同Fruit的Person按顺序编号,再通过透视操作转成宽表,完整实现代码如下:
import pandas as pd # 构造测试数据,实际使用时替换为自己的df即可 df = pd.DataFrame({ 'Fruit': ['Banana', 'Banana', 'Carrot', 'Carrot', 'Carrot'], 'Person': ['Jake', 'Paul', 'Nancy', 'Sydney', 'Jane'] }) # 步骤1:按Fruit分组,给分组内每一行生成从1开始的顺序编号 df['col_suffix'] = df.groupby('Fruit').cumcount() + 1 # 步骤2:透视转换为宽表 res = df.pivot(index='Fruit', columns='col_suffix', values='Person') # 步骤3:修改列名符合要求,空值填充为空字符串,重置索引 res.columns = [f'Person{i}' for i in res.columns] res = res.reset_index().fillna('')
执行后得到的res就是你需要的目标格式。
groupby部分用法说明
df.groupby('Fruit').cumcount()的作用是:将数据按Fruit字段分组后,给每个分组内部的行按原始数据的出现顺序从0开始递增编号,加1之后就得到了1、2、3的序号,刚好对应Person1、Person2、Person3的后缀。
你之前用drop_duplicates只能保留每个分组的首条/尾条记录,无法获取中间值,就是因为没有给分组内的所有行做独立编号,导致中间行被去重逻辑直接删掉了。
内容的提问来源于stack exchange,提问作者justryingouthere
相关产品推荐
相关产品推荐

