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

无需分组压缩的Pandas DataFrame Python式聚合实现问询

问题描述

现有如下Pandas DataFrame(df),需要计算订单总和(Sum of orders)与唯一订单尺寸数量(Number of unique order sizes),但不想压缩原DataFrame的结构:

list_of_lists = [['11','Berlin',2],['11','Berlin',2],['11','Berlin',3],
                 ['22','Munich',4],['22','Munich',4]]

df = pd.DataFrame(list_of_lists, columns=['ID', 'City', 'Order Size'])

原DataFrame内容:

ID  City    Order Size
0   11  Berlin  2
1   11  Berlin  2
2   11  Berlin  3
3   22  Munich  4
4   22  Munich  4

期望输出:

ID  City    Order Size   Sum of orders  Number of unique order sizes
0   11  Berlin  2            7              2
1   11  Berlin  2            7              2
2   11  Berlin  3            7              2
3   22  Munich  4            8              1
4   22  Munich  4            8              1

常规使用groupby(['ID','City'])会将DataFrame压缩为两行,之后需要左连接回原DataFrame,希望有更简洁的Pythonic实现方式。

简洁实现方法

直接用Pandas的groupby.transform()方法,它会将分组计算的结果广播回原DataFrame的每一行,无需额外的连接操作,完美保留原结构:

# 计算订单总和,按ID和City分组后对Order Size求和
df['Sum of orders'] = df.groupby(['ID', 'City'])['Order Size'].transform('sum')

# 计算唯一订单尺寸数量,按ID和City分组后对Order Size统计唯一值个数
df['Number of unique order sizes'] = df.groupby(['ID', 'City'])['Order Size'].transform('nunique')

执行后得到的df就是期望的输出结构,每个分组的统计结果会自动匹配到原DataFrame对应的每一行。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.10 00:00:14