【问题标题】:Aggregation function optimization聚合函数优化
【发布时间】:2021-12-17 18:07:57
【问题描述】:

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

ID AGE GENDER OCCUPATION
1 64 101 "occ1"
2 64 100 "occ2"
2 66 100 Nan
2 Nan 100 "occ2"
3 Nan 101 "occ3"
3 Nan Nan Nan
3 32 Nan Nan
. . . .

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

ID AGE GENDER OCCUPATION
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]})

提前感谢您的优化想法,对可能的问题重复表示歉意

【问题讨论】:

    标签: python pandas optimization pandas-groupby aggregate-functions


    【解决方案1】:

    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"
    

    【讨论】:

    • 谢谢你,最快最简单的。和第一个:)
    猜你喜欢
    • 1970-01-01
    • 2018-02-18
    • 1970-01-01
    • 1970-01-01
    • 2010-12-18
    • 2017-11-03
    • 2014-12-14
    • 1970-01-01
    • 2021-09-03
    相关资源
    最近更新 更多