Pandas分组聚合多条件结果拼接问题求助
解决Pandas分组后字符串拼接的问题
你的问题出在lambda里的条件判断逻辑——你用了嵌套的三元运算符,导致两个条件是互斥的判断,而不是独立的拼接逻辑。
原代码里的表达式结构其实是:
"XY" if (x=='Ref_01').sum() > 0 else ("" + "ABC" if (x=='Other_Ref').sum() > 0 else "")
意思是:如果找到Ref_01就直接返回XY,完全不会去判断Other_Ref;只有没找到Ref_01的时候,才会去检查Other_Ref并返回ABC或空字符串。这就是为什么ABC会替换XY,而不是拼接。
修正方案1:用列表收集标签后拼接
直接分别判断两个条件,把符合要求的标签放进列表,最后用逗号连接:
Result = Dataset.groupby(['Number']).agg( Data_Type=('Product', lambda x: ', '.join([ 'XY' if (x == 'Ref_01').any() else '', 'ABC' if (x == 'Other_Ref').any() else '' ]).replace(', ,', ',').strip(', ')) ).reset_index()
这里用.any()替代.sum()>0更高效,因为只要找到一个匹配项就会停止遍历。
修正方案2:自定义函数(可读性更高)
如果觉得lambda里写太挤,可以单独定义一个函数,逻辑更清晰:
def get_data_type(group): tags = [] if (group == 'Ref_01').any(): tags.append('XY') if (group == 'Other_Ref').any(): tags.append('ABC') return ', '.join(tags) Result = Dataset.groupby(['Number'])['Product'].agg(get_data_type).reset_index(name='Data_Type')
这个写法更易维护,后续要加新的标签规则也很方便。
内容的提问来源于stack exchange,提问作者R_User_001
相关产品推荐
相关产品推荐

