繁体   English   中英

使用单个 pandas groupby 命令将不同的功能应用于不同的列

[英]Apply different functions to different columns with a singe pandas groupby command

我的数据存储在df中。 我每个group有多个users 我想按组对df进行group并将不同的功能应用于不同的列。 扭曲的是,我想在此过程中为新列分配自定义名称。

np.random.seed(123)
df = pd.DataFrame({"user":range(4),"group":[1,1,2,2],"crop":["2018-01-01","2018-01-01","2018-03-01","2018-03-01"],
                   "score":np.random.randint(400,1000,4)})
df["crop"] = pd.to_datetime(df["crop"])
print(df)
   user  group        crop  score
0     0      1  2018-01-01    910
1     1      1  2018-01-01    765
2     2      2  2018-03-01    782
3     3      2  2018-03-01    722

我想获得score的平均值,以及按group分组的crop的最小值和最大值,为每个新列分配自定义名称。 所需的 output 应如下所示:

  group  mean_score    min_crop    max_crop
0     1       837.5  2018-01-01  2018-01-01
1     2       752.0  2018-03-01  2018-03-01

我不知道如何在 Python 的单行中做到这一点。 在 R 中,我将使用data.table并获得以下信息:

df[, list(mean_score = mean(score),
          max_crop   = max(crop),
          min_crop   = min(crop)), by = group]

我知道我可以对数据进行分组并将.agg与字典结合使用。 是否有另一种方法可以在此过程中自定义每个列的名称?

尝试使用groupby().apply()创建具有所需操作的 function :

def f(x):
    d = {}
    d['mean_score'] = x['score'].mean()
    d['min_crop'] = x['crop'].min()
    d['max_crop'] = x['crop'].max()
    return pd.Series(d, index=['mean_score', 'min_crop', 'max_crop'])

data = df.groupby('group').apply(f)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM