pandas按指定列分组合并ALPHA列非空值并移除NAN的实现问题
实现方案
核心逻辑
你给出的数据有明确特性:相同ColA~ColE分组下,每一个ALPHA列最多存在1个非NAN值,因此不需要拆分表再拼接,直接按5个键列分组后对ALPHA列做聚合即可,聚合时直接取唯一的非空值就行。
完整代码
import pandas as pd # 1. 提取分组键列和ALPHA列 # 正则匹配保证只取ColA到ColE五列,忽略大小写避免匹配失败 key_cols = input_df.columns[input_df.columns.str.contains(r'^Col[A-E]$', case=False)].tolist() alpha_cols = input_df.columns[input_df.columns.str.contains('ALPHA')].tolist() # 2. 分组聚合,min_count=1保证全NAN的列聚合后仍为NAN output_df = input_df.groupby(key_cols, as_index=False)[alpha_cols].sum(min_count=1)
说明
- 该方案性能远高于逐列处理的写法,适配你上千列的大表场景
- 你给出的预期输出中
u/v/w/z/k组存在多条行属于笔误,按合并需求每个唯一ColA~ColE组合仅会对应1行结果,聚合后所有ALPHA列的非空值都会合并到同一行 - 如果你需要保留非数值类型的ALPHA值,可以把聚合逻辑替换为
.agg(lambda x: x.dropna().iloc[0] if x.notna().any() else pd.NA),效果一致
内容的提问来源于stack exchange,提问作者Stan
相关产品推荐
相关产品推荐

