如何基于另一列最大值获取对应列值 同时统计唯一账户的对应总和

实现方案
以下提供两种常用场景的可直接运行的实现逻辑:
1. SQL实现(支持Hive/Spark SQL/MySQL 8.0及以上带窗口函数的数据库)
WITH get_max_state AS ( SELECT account, state AS max_state, ROW_NUMBER() OVER(PARTITION BY account ORDER BY count DESC) AS rn FROM 你的表名 ), calc_total AS ( SELECT account, SUM(DISTINCT value) AS sum_value FROM 你的表名 GROUP BY account ) SELECT a.account, b.max_state, a.sum_value FROM calc_total a LEFT JOIN get_max_state b ON a.account = b.account AND b.rn = 1;
2. Python Pandas实现
import pandas as pd # 替换为你的实际数据表,列名对应账号、state、count、待求和字段 df = pd.read_csv("你的数据文件路径.csv") def group_process(group_df): # 取count最大的对应state max_state = group_df.loc[group_df["count"].idxmax(), "state"] # 对第三列去重后求和 total = group_df["待求和字段名"].drop_duplicates().sum() return pd.Series([max_state, total], index=["max_state", "sum_value"]) result_df = df.groupby("account", as_index=False).apply(group_process)
- 若同一个账号下有多个state的count同为最大值,SQL场景可将
ROW_NUMBER()替换为RANK()取所有最大值,或新增排序规则取固定第一个;Pandas场景可在取idxmax前增加sort_values规则即可。 - 若第三列不需要去重,直接删除SQL中的
DISTINCT关键字、Pandas中的.drop_duplicates()方法即可。
内容的提问来源于stack exchange,提问作者MGriggs
相关产品推荐
相关产品推荐

