如何使用pandas groupby仅聚合非空值,实现多行合并为单行?
Pandas 按ID分组拼接Cities非空值解决方案
你可以直接修改agg方法内的匿名函数,在拼接前先过滤所有空值即可,修改后的代码如下:
import pandas as pd # 兼容NaN、None、空字符串、全空格的通用写法 result = dataFrame.groupby(['ID'], as_index=False) .agg({'Cities': lambda x: ','.join([val for val in x if pd.notna(val) and str(val).strip() != ''])})
如果你的场景确定只有空字符串这一种空值类型,可以简化为:
result = dataFrame.groupby(['ID'], as_index=False) .agg({'Cities': lambda x: ','.join([val for val in x if val.strip() != ''])})
逻辑说明
- 遍历当前分组下所有Cities值,先过滤掉NaN、None、空字符串、全空格的无效值
- 直接用
','.join()拼接过滤后的有效列表,天然不会出现连续逗号、首尾逗号的问题
如果需要将全空ID对应的Cities空字符串改为NaN,可在聚合后补充处理:
import numpy as np result['Cities'] = result['Cities'].replace('', np.nan)
内容的提问来源于stack exchange,提问作者Nayan Desale
相关产品推荐
相关产品推荐

