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

Python pandas使用groupby合并行时如何保留全部原始列?

问题原因

你当前代码仅保留两列的核心原因是:groupby操作后你只选择了name_hash列做拼接处理,其余列没有指定聚合规则,因此被自动丢弃。

解决方案

场景1:仅按qty_ordered分组,拼接同组的name_hash、保留其余所有列

如果同一个qty_ordered分组内,其余列的取值一致,可以用如下写法,其余列默认取分组内第一个值:

import pandas as pd
data = pd.read_csv('in/tables/sales-order-item.csv')
# 构造聚合规则:name_hash用空格拼接,其余列取分组内第一个值
agg_dict = {col: 'first' for col in data.columns if col != 'name_hash'}
agg_dict['name_hash'] = ' '.join
# 分组聚合,as_index=False避免分组键转为索引,无需额外reset_index
data = data.groupby('qty_ordered', as_index=False).agg(agg_dict)

场景2:按qty_ordered+name_hash双字段合并行

如果你的实际需求是两个字段相同才合并为同一行,调整groupby的分组键即可:

import pandas as pd
data = pd.read_csv('in/tables/sales-order-item.csv')
# 双字段分组,其余列取分组内第一个值
data = data.groupby(['qty_ordered', 'name_hash'], as_index=False).agg('first')

补充说明

如果其余列有定制化的聚合需求(比如销售额列求和、时间列取最大值、其余字符串列拼接等),直接修改agg入参的字典即可,示例:

# 示例:order_amount列求和、create_time列取最大值、其余列取第一个
agg_dict = {
    'name_hash': ' '.join,
    'order_amount': 'sum',
    'create_time': 'max',
    **{col: 'first' for col in data.columns if col not in ['name_hash', 'order_amount', 'create_time']}
}
data = data.groupby('qty_ordered', as_index=False).agg(agg_dict)

内容的提问来源于stack exchange,提问作者Daniel Chovanec

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.17 09:24:10