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
相关产品推荐
相关产品推荐

