如何在Pandas GroupBy后用|拼接数据并排除空值/NaN/空白字符串
解决分组拼接时排除空值/空白字符串的问题
直接修改lambda函数,在拼接前过滤掉空值、空白字符串这类无效内容即可:
data = df.groupby('pid')[['date','task','language']].transform( lambda x: '|'.join([val for val in x if val and str(val).strip()]) )
代码说明
val and str(val).strip():先判断值是否非空,再将值转为字符串后去除首尾空白,确保过滤掉None、''、' '这类无效内容- 通过列表推导式遍历每组的字段值,只保留有效内容后再用
|拼接
如果你的空值是pandas中的NaN,可以把判断条件调整为:
import pandas as pd data = df.groupby('pid')[['date','task','language']].transform( lambda x: '|'.join([val for val in x if pd.notna(val) and str(val).strip()]) )
示例验证
假设原始数据如下:
| pid | date | task | language |
|---|---|---|---|
| 1 | 2024-01-01 | 编码 | Python |
| 1 | NaN | Java | |
| 1 | 2024-01-02 | 测试 | |
| 2 | 需求分析 | Go |
用修改后的代码处理后,pid=1的date字段会拼接成2024-01-01|2024-01-02,task字段为编码|测试,language字段为Python|Java,完全排除了无效内容。
内容的提问来源于stack exchange,提问作者Siva Rama krishna Kumar
相关产品推荐
相关产品推荐

