分组计算数值列众数遇平局时,如何获取最大值?
解决GroupBy众数平局取最大值的问题
首先注意你的value列是字符串类型且包含NaN,先统一转为数值类型更便于后续计算:
import pandas as pd import numpy as np df = pd.DataFrame({ 'client_id':['A', 'A', 'A', 'A', 'B', 'B', 'B', 'C'], 'date':['2019-01-01']*8, 'value':['2', '2', '1', '1', '3', '3', '1', np.NaN] }) # 转换value列为数值类型 df['value'] = pd.to_numeric(df['value'])
接下来自定义聚合函数,处理众数平局的场景:当存在多个众数时取最大值,同时处理全为NaN的分组:
def mode_max(x): modes = x.mode() # 众数为空则返回NaN,否则返回最大的众数 return modes.max() if not modes.empty else np.nan
最后用GroupBy调用这个自定义函数:
result = df.groupby(['client_id', 'date']).agg({'value': mode_max}).reset_index() print(result)
最终输出
| client_id | date | value |
|---|---|---|
| A | 2019-01-01 | 2.0 |
| B | 2019-01-01 | 3.0 |
| C | 2019-01-01 | NaN |
这样就实现了平局时取最大众数的需求,同时正确处理了全NaN的分组。
内容的提问来源于stack exchange,提问作者Sky_7
相关产品推荐
相关产品推荐

