Python清洗DataFrame数据:合并name与phone_no字段相同的CSV行
实现方案
核心逻辑是对DataFrame按照name、phone_no两列做分组,对分组内其余列做聚合处理即可。
最简实现(分组内同列仅1个非空值场景)
pandas内置的first()聚合方法会自动跳过空值,取分组内第一个有效数据,直接使用即可:
import pandas as pd # 假设你的原始数据存储在df变量中 result_df = df.groupby(['name', 'phone_no'], as_index=False).first()
多非空值合并场景
如果同一分组下某列存在多个不同的非空值,需要把所有值拼接为单个内容,可以自定义聚合规则:
import pandas as pd import numpy as np result_df = df.groupby(['name', 'phone_no'], as_index=False).agg( # 示例为对所有列去重后用逗号拼接非空值 lambda x: ','.join(x.dropna().astype(str).unique()) if len(x.dropna()) > 0 else np.nan )
自定义不同列的聚合规则
如果不同列需要不同的聚合逻辑(比如数值列求和、时间列取最新值),可以单独指定:
result_df = df.groupby(['name', 'phone_no'], as_index=False).agg( # 地址列取第一个非空值 address = ('address', 'first'), # 消费金额列求和 total_consume = ('consume_amount', 'sum'), # 最近消费时间取最大值 last_consume_time = ('consume_time', 'max') )
内容的提问来源于stack exchange,提问作者justb
相关产品推荐
相关产品推荐

