pandas使用crosstab做透视时aggfunc拼接出现重复值如何避免?
问题解决方法
核心原因
出现重复拼接是因为同一个request_id + data_point_key分组下存在多个相同的val值,','.join会直接拼接分组内所有值,不会自动去重。
方案1:自定义聚合函数直接去重拼接
在aggfunc参数中传入自定义lambda函数,先对分组内的val去重再拼接:
pd.crosstab( index=df['request_id'], columns=df['data_point_key'], values=df['val'], aggfunc=lambda x: ','.join(x.unique()) )
x.unique()会保留分组内值的首次出现顺序,如果你需要按字母序排序后拼接,可以替换为sorted(x.unique())。
方案2:先对数据集去重再执行crosstab
如果后续还有其他操作需要用到去重后的数据集,可以先按分组维度和值字段去重,再执行原有逻辑:
# 按分组维度+值字段去重,避免重复值进入聚合环节 df_dedup = df.drop_duplicates(subset=['request_id', 'data_point_key', 'val']) pd.crosstab( index=df_dedup['request_id'], columns=df_dedup['data_point_key'], values=df_dedup['val'], aggfunc=','.join )
内容的提问来源于stack exchange,提问作者SteveS
相关产品推荐
相关产品推荐

