首页 > 解决方案 > 聚合函数优化

问题描述

我有一个名为 customer_base 的数据集,包含超过 800K 行,如下所示:

ID 年龄 性别 职业
1 64 101 “occ1”
2 64 100 “occ2”
2 66 100
2 100 “occ2”
3 101 “occ3”
3
3 32
. . . .

在分组操作之后,所需的版本应该如下所示:

ID 年龄 性别 职业
1 64 101 “occ1”
2 66 100 “occ2”
3 32 101 “occ3”
. . . .

以前我尝试过像下面这样的代码示例来使表格尽可能干净,但是花了太多时间。现在我需要一个更快的函数来获取列的任何可用值occupation

customer_base.groupby("ID",
                      as_index=False).agg({"GENDER":"max",                                                              
                                           "AGE":"max",
                                           "OCCUPATION":lambda x: np.nan if len(x[x.notna()])==0 else x[x.notna()].values[0]})

提前感谢您的优化想法,抱歉可能出现重复问题

标签: pythonpandasoptimizationpandas-groupbyaggregate-functions

解决方案


用于GroupBy.first第一个非NaNs 值:

df = customer_base.groupby("ID", as_index=False).agg({"AGE":"max",
                                                      "GENDER":"max",
                                                      "OCCUPATION":'first'})

print (df)
   ID   AGE  GENDER OCCUPATION
0   1  64.0   101.0     "occ1"
1   2  66.0   100.0     "occ2"
2   3  32.0   101.0     "occ3"

推荐阅读