如何基于EVENT_ID分组为Pandas DataFrame批量生成多列新字段
实现方案
你的需求是典型的长表转宽表场景,直接用Pandas内置的pivot_table方法即可快速实现,无需手写循环:
import pandas as pd # 假设原始数据存储在df变量中 # 1. 按EVENT_ID分组,将SELECTION_TRAP值转为列,对应值取BSP wide_df = df.pivot_table( index="EVENT_ID", columns="SELECTION_TRAP", values="BSP", aggfunc="first", fill_value=0 ) # 2. 补全1~8全部列,避免部分序号缺失 for num in range(1,9): if num not in wide_df.columns: wide_df[num] = 0 # 3. 调整列顺序并重命名为要求的n_*格式 wide_df = wide_df[[1,2,3,4,5,6,7,8]].rename(columns=lambda x: f"n_{x}") # 4. 重置索引,将EVENT_ID转为普通列 result = wide_df.reset_index()
输出的result就和你给出的预期格式完全一致。
原有代码问题说明
- 没有按
EVENT_ID做分组隔离,不同事件的数值会互相覆盖 - 赋值时直接操作整列(如
df['1'] = xxx),会把该列所有行都改成同一个值,无法实现行级匹配 - 缺失列的补全逻辑错误,导致输出列顺序混乱、冗余行重复
内容的提问来源于stack exchange,提问作者chuky pedro
相关产品推荐
相关产品推荐

