如何透视含重复Detail值的Pandas DataFrame,实现多收件人分开展示
问题原因
你当前使用aggfunc='sum'对字符串类型的Value值聚合时,pandas会自动将多个字符串拼接为单个值,且仅指定Agent作为唯一索引时,同一个Agent的所有记录会被合并到同一行,因此无法实现每个收件人单独成行的效果。
解决方案
核心思路是给同一个Agent下的同类型Detail的多值添加组内行号作为二级索引,保证透视时每个值对应单独一行,不会被聚合。
完整实现代码如下:
import pandas as pd resultsFile = 'C:\\Oracle\\testfile.csv' df = pd.read_csv(resultsFile, skip_blank_lines=True) # 给同一个Agent、同个Detail的多条记录添加组内行号 df['row_num'] = df.groupby(['Agent', 'Detail']).cumcount() # 透视时将Agent和行号共同作为索引,避免聚合拼接 df2 = df.pivot_table( index=['Agent', 'row_num'], columns='Detail', values='Value', aggfunc='first' ).reset_index().drop('row_num', axis=1) # 可选:移除辅助行号列,恢复干净的输出结构 print(df2)
效果说明
假设你的原始数据为:
| Agent | Detail | Value |
|---|---|---|
| 张三 | Email Recipient | zhangsan@test.com |
| 张三 | Email Recipient | lisi@test.com |
| 张三 | Department | 销售部 |
| 李四 | Email Recipient | wangwu@test.com |
处理后的输出会是:
| Agent | Email Recipient | Department |
|---|---|---|
| 张三 | zhangsan@test.com | 销售部 |
| 张三 | lisi@test.com | 销售部 |
| 李四 | wangwu@test.com | NaN |
完全符合每个收件人单独成行的需求,其他非邮箱类的Detail字段值会自动填充到同Agent的所有行中。
注意事项
如果存在多个Detail类型都对应多值的场景,该方法会自动按最大的同Agent下多值数量生成行数,每个值都会对应到独立行,不会出现拼接问题。
内容的提问来源于stack exchange,提问作者Sri
相关产品推荐
相关产品推荐

