已知单输出函数为Pandas DataFrame加列方案,多匹配结果如何生成多列?
实现多输出场景的Pandas列分配方案
当然可以搞定这种多匹配结果的列分配需求!针对你给出的示例数据,我们可以通过Pandas的分组标记+宽表转换组合操作来实现,具体步骤和代码如下:
1. 先准备示例数据
首先我们把你给出的示例数据转换成Pandas DataFrame:
import pandas as pd # 构造示例数据 df = pd.DataFrame({ 'Worker_ID': [3, 3, 1], 'Boss_ID': [0, 2, 2] })
2. 给组内记录添加序号标记
我们需要给同一个Worker_ID下的不同Boss_ID添加序号,用来区分它们的位置:
# 按Worker_ID分组,给每组内的记录从1开始编号 df['boss_seq'] = df.groupby('Worker_ID').cumcount() + 1
此时数据会变成这样:
| Worker_ID | Boss_ID | boss_seq |
|---|---|---|
| 3 | 0 | 1 |
| 3 | 2 | 2 |
| 1 | 2 | 1 |
3. 行转列实现多列分配
通过pivot方法把同一Worker_ID下的多个Boss_ID转成不同列:
# 行转列,将同一Worker_ID的Boss_ID分配到不同列 result_df = df.pivot( index='Worker_ID', columns='boss_seq', values='Boss_ID' ) # 重命名列名,让结果更直观 result_df.columns = [f'Boss_ID_{seq}' for seq in result_df.columns] # 可选:把Worker_ID从索引转回普通列 result_df = result_df.reset_index()
最终得到的结果就是你需要的多列格式:
| Worker_ID | Boss_ID_1 | Boss_ID_2 |
|---|---|---|
| 3 | 0 | 2 |
| 1 | 2 | NaN |
补充说明
- 如果某个
Worker_ID只有1个匹配的Boss_ID,多余的列会用NaN填充,你可以根据需求用fillna()方法替换成0、空字符串等; - 这个方法是通用的,不管每个
Worker_ID有多少个匹配结果,都会自动生成对应数量的列,不需要提前知道最大匹配数。
内容的提问来源于stack exchange,提问作者ifly6
相关产品推荐
相关产品推荐

