如何对DataFrame按Trans_ID分组,合并多行二进制标识为单行?
合并同一交易ID的多行部门标识数据
问题背景
数据集包含交易ID(Trans_ID)、商品名称(Item)和多个部门二进制标识列,同一交易ID对应多行数据(因一笔交易可能包含多部门商品)。需要移除Item列,将同一Trans_ID的多行合并为单行,只要交易包含对应部门商品,标识列就设为1。
输入示例
import pandas as pd d = {'Trans_ID': [149857724, 149857724, 394875934, 16544562, 16544562], 'Item': ['Windex','Car Horn', 'Steering Wheel', 'Horse Feed', 'Bleech'], 'Cleaning_Supplies_Dept_Flag': [1, 0, 0, 0, 1], 'Automobile_Parts_Dept_Flag': [0, 1, 1, 0, 0], 'Horse_Supplies_Dept_Flag': [0, 0, 0, 1, 0]} ex = pd.DataFrame(data=d) ex
期望输出
d = {'Trans_ID': [149857724, 394875934, 16544562], 'Cleaning_Supplies_Dept_Flag': [1, 0, 1], 'Automobile_Parts_Dept_Flag': [1, 1, 0], 'Horse_Supplies_Dept_Flag': [0, 0, 1]} result = pd.DataFrame(data=d) result
解决方案
直接使用groupby结合max()方法即可实现需求,逻辑简单高效:
# 移除Item列,按Trans_ID分组后对各标识列取最大值 result = ex.drop('Item', axis=1).groupby('Trans_ID').max().reset_index() print(result)
步骤说明
ex.drop('Item', axis=1):删除不需要的Item列,只保留交易ID和部门标识列groupby('Trans_ID'):以交易ID为分组依据,将同一交易的多行数据归为一组max():对每个分组内的二进制标识列取最大值——只要该交易下有对应部门的商品(标识为1),结果就会保留1,符合需求reset_index():将分组后的Trans_ID从索引列转换为普通数据列,匹配期望的输出格式
内容的提问来源于stack exchange,提问作者Zane
相关产品推荐
相关产品推荐

