如何调整pd.get_dummies输出实现按ID聚合并标记对应类型为1
解决方法
你可以在独热编码执行完成后,按ID字段分组,对所有生成的type类列取最大值即可。逻辑很简单:只要该ID下对应类型出现过至少1次,最大值就为1,没出现过就是0,刚好匹配你的需求。完整代码如下:
import pandas as pd # 原始数据构造 df = pd.DataFrame({ 'ID': ['AA23', 'AB24', 'DJ44', 'KD33', 'KD33', 'BK89', 'BL92', 'BL92', 'IO89'], 'type': ['A', 'B', 'B', 'C', 'A', 'B', 'B', 'C', 'A'] }) # 一步完成编码+聚合 result = pd.get_dummies(df, columns=['type'], prefix='type')\ .groupby('ID', as_index=False)\ .max()
执行后输出的result就是你需要的预期结果。
可选的一步式写法
你也可以直接用交叉表实现,无需先做独热编码再聚合:
result = pd.crosstab(df['ID'], df['type'])\ .clip(upper=1)\ .reset_index()\ .rename_axis(columns=None)\ .add_prefix('type_')\ .rename(columns={'type_ID': 'ID'})
内容的提问来源于stack exchange,提问作者dmd7
相关产品推荐
相关产品推荐

