如何将DataFrame指定列的值添加到上一行并删除冗余空行
实现方案
你不需要遍历DataFrame,用Pandas内置的向量化操作就能高效完成需求,两种实现方式如下:
方式1:贴合你原有三步逻辑的实现
中间步骤代码
# 先重置索引避免非连续索引导致报错 df = df.reset_index(drop=True) # 找到所有A列为空的行的索引 nan_rows = df[df['A'].isnull()].index # 将空行C列的值拼接到上一行的C列 for idx in nan_rows: prev_idx = idx - 1 # 兼容首行就是空行的极端场景 if prev_idx in df.index: df.loc[prev_idx, 'C'] = f"{df.loc[prev_idx, 'C']}, {df.loc[idx, 'C']}"
后续直接执行你写的df.dropna(subset=['A'])即可得到目标结果。
方式2:更高效率的全流程聚合实现(数据量较大时推荐)
不需要拆分三步,用分组逻辑直接生成结果:
# 按A列非空的位置分组,每组对应一条完整数据 df['group'] = df['A'].notna().cumsum() # 分组聚合:C列拼接所有值,其余列取组内第一个非空值 df = df.groupby('group').agg( A=('A', 'first'), B=('B', 'first'), C=('C', ', '.join), D=('D', 'first') ).reset_index(drop=True)
如果C列存在非字符串类型的值,执行前可以先统一转成字符串:df['C'] = df['C'].astype(str)
内容的提问来源于stack exchange,提问作者user17041959
相关产品推荐
相关产品推荐

