You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何对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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.15 14:10:46