无需聚合的对象列Pivot实现:DataFrame分类值转置为列的需求咨询
实现方法
核心思路是先给同一ObjColA分组下的每条记录生成组内唯一的行序号,保证(行序号, ObjColA取值)组合唯一后再做透视,不需要额外聚合规则。
完整代码示例
import pandas as pd # 构造示例DataFrame(实际使用时替换为自己的DataFrame即可) df = pd.DataFrame({ 'ObjColA': ['2021-10-13', '2021-10-13', '2021-10-13', '2021-10-14', '2021-10-14', '2021-10-14', '2021-10-14'], 'ObjColB': ['ABC', 'DEF', 'XYZ', 'ABC', 'PQR', 'DEF', 'XYZ'] }) # 步骤1:为每个ObjColA分组内的记录生成组内行序号 df['group_inner_id'] = df.groupby('ObjColA').cumcount() # 步骤2:直接透视得到目标结构 result = df.pivot(index='group_inner_id', columns='ObjColA', values='ObjColB') # 可选操作:去掉多余的行索引,空值替换为空字符串(更贴合预期输出格式) result = result.reset_index(drop=True).fillna('')
输出结果验证
执行后result的结构如下:
| 2021-10-13 | 2021-10-14 |
|---|---|
| ABC | ABC |
| DEF | PQR |
| XYZ | DEF |
| XYZ |
原理解释
pivot方法本身要求每个索引+列名的组合唯一,我们通过groupby.cumcount()给同日期下的每个值分配了唯一的组内序号作为行索引,就满足了唯一性要求,不需要设置聚合规则也能完成转置。
内容的提问来源于stack exchange,提问作者asimo
相关产品推荐
相关产品推荐

