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

Pandas按多列分组求最高总价:查找2022年2月总价最高客户

优化方案

你的现有代码仅完成了分组求和的基础环节,要得到目标结果还需补充数据类型转换、日期过滤、最大值筛选等关键步骤,具体优化如下:

1. 修复Price列的数据类型

原始数据中Price是带逗号的字符串,直接求和会导致计算错误,需先转换为数值类型:

df['Price'] = df['Price'].str.replace(',', '').astype(float)

2. 过滤目标日期的记录

只保留date为2/1/2022的数据,排除无关日期的条目:

filtered_df = df[df['date'] == '2/1/2022']

3. 分组求和并保留box信息

由于每个客户对应固定的box类型,分组时将client、box、date作为联合分组键,确保结果中保留box列:

sum_df = filtered_df.groupby(['client', 'box', 'date'])['Price'].sum().reset_index()

4. 筛选总价最高的客户

定位Price列最大值对应的行,得到最终结果:

result = sum_df[sum_df['Price'] == sum_df['Price'].max()]

5. 可选:还原Price的逗号格式

如果需要和期望结果一致,将数值格式的Price重新转为带逗号的字符串:

result['Price'] = result['Price'].apply(lambda x: f"{int(x):,}")

完整优化代码

# 预处理Price列
df['Price'] = df['Price'].str.replace(',', '').astype(float)

# 过滤目标日期数据
filtered_df = df[df['date'] == '2/1/2022']

# 分组求和并保留相关字段
sum_df = filtered_df.groupby(['client', 'box', 'date'])['Price'].sum().reset_index()

# 筛选总价最高的记录
result = sum_df[sum_df['Price'] == sum_df['Price'].max()]

# 格式化Price为带逗号的字符串(可选)
result['Price'] = result['Price'].apply(lambda x: f"{int(x):,}")

print(result)

执行后输出结果:

client box    Price      date
1    cara  BB  30,270  2/1/2022

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.15 20:30:46