python - 按平均小时数分组

标签 python pandas-groupby

我有数据 df:

month   name    duration
5       abc     09:03:00
5       abc     09:09:00
5       eef     10:03:00
5       eef     09:03:00
5       eef     09:03:00
5       ttk     10:03:00
5       abc     09:03:00
5       ttk     09:23:00
6       ttk     09:03:00
6       abc     11:03:00

我需要对此进行分组才能得到如下结果:

month   name    name_size   name_nuique duration_mean
5       abc     3           1           09:05:00
        eef     3           1           09:23:00
        ttk     2           1           09:43:00
6       abc     1           1           09:03:00
        ttx     1           1           11:03:00

请让我知道如何执行此操作。 我尝试做

df.groupby(['month','name'], sort=False).agg({'name':['size','nunique'],
          'duration':['mean']})

但我收到错误消息:

No numeric types to aggregate

最佳答案

标准 pandas mean() 无法处理时间增量。将列转换为时间增量后,对其应用自定义 lambda 函数:

df["duration"] = pd.to_timedelta(df["duration"])
df.groupby(["month", "name"], sort=False).agg({
                               "name": ["size", "nunique"],
                               "duration": [lambda x: x.mean()]})

关于python - 按平均小时数分组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52697002/

相关文章:

python - 如何对每行都有列表的数据帧进行单热编码

python - 对两列进行分组并计算第三列中的唯一值

python - Groupby 中的项目计数

python - Pandas 在 groupby 上组合列

python - tkinter网格行没有出现并且没有传递到正确的功能

python - 无法理解python中的实例变量描述符

python - 0.8.8 之前的版本创建页眉和页脚

python - 获取python中子目录的名称(不是完整路径)

Python:(Pandas)如何忽略按 id 分组的最低和最高 25% 的值进行平均值计算

python - 使用 pandas 组合组