无需分组压缩的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
相关产品推荐
相关产品推荐

