Pandas DataFrame如何按唯一标识合并拆分行并处理值冲突
解决方案
前置说明
需求核心分为两个处理步骤:先删除指定的冗余完整行,再合并同唯一标识下分散在多行的有效值,以下是可直接运行的实现代码。
完整实现代码
首先导入依赖:
import pandas as pd import numpy as np
步骤1:过滤需要丢弃的指定完整行
你可以根据实际业务规则调整筛选条件,以下提供两种常见场景的筛选逻辑:
- 场景1:需要丢弃的完整行已有标记字段(比如
is_deprecated = 1)
# 示例数据可替换为你的实际DataFrame df = pd.read_csv("你的数据路径.csv") # 过滤规则可自定义修改 df_filtered = df[df['is_deprecated'] != 1].copy()
- 场景2:需要丢弃的是q1/q2/q3三个字段全为非空的完整行
q_cols = ['q1', 'q2', 'q3'] # 标记非完整行 df['is_not_full'] = df[q_cols].isna().any(axis=1) df_filtered = df[df['is_not_full']].copy()
步骤2:合并同唯一标识下的有效值
因为q字段无重复赋值,直接按唯一键分组取每个字段的第一个非空值即可:
df_result = df_filtered.groupby( ['timestamp', 'code', 'code_2'], as_index=False ).agg( q1 = ('q1', 'first'), q2 = ('q2', 'first'), q3 = ('q3', 'first') # 如有其他需要保留的字段,可在此处补充对应的聚合规则 )
结果验证
最终输出的df_result中,每个timestamp + code + code_2的组合仅对应一行记录,q1/q2/q3均为合并后的完整有效值。
内容的提问来源于stack exchange,提问作者myradio
相关产品推荐
相关产品推荐

