如何按天聚合熊猫数据框

Posted

技术标签:

【中文标题】如何按天聚合熊猫数据框【英文标题】:How to aggregate pandas Dataframe by day 【发布时间】:2019-08-02 03:12:14 【问题描述】:

我有以下熊猫数据框:

time,                value
2018-08-02 09:19:37, 2
2018-08-02 09:19:47, 3
2018-08-02 09:19:57, 6
......
2018-08-03 04:49:27, 2
2018-08-03 04:49:37, 4
2018-08-03 04:49:47, 5

我想构建一个输出数据框,如下所示:

time,                value
2018-08-02 11:59:59, AVG(2+3+6+..)
2018-08-03 11:59:59, AVG(2+4+5+..)

任何帮助将不胜感激。非常感谢。

【问题讨论】:

df.groupby(df.time.dt.date).value.mean() ?? 我试过了,但我得到 pandas.core.base.DataError: No numeric types to aggregate 更改值的dtype,df.value=df.value.astype(int)然后尝试,查看我的答案以获得详细解释 【参考方案1】:

IIUC,使用:

m=df.groupby(df.time.dt.date).value.mean().reset_index()
m.time=pd.to_datetime(m.time.astype(str)+' 11:59:59')
print(m)

                 time     value
0 2018-08-02 11:59:59  3.666667
1 2018-08-03 11:59:59  3.666667

注意: 如果dtypes是字符串,在上面的代码之前先使用下面的:

df.time=pd.to_datetime(df.time)
df.value=df.value.astype(int)

【讨论】:

非常感谢。在我投票之前。请您确认您的 sol 平均从 00:00:00 到 11:59:59 的所有值吗? 当然。我会做。请您确认您的 sol 平均从 00:00:00 到 11:59:59 的所有值吗? @CarloAllocca 此解决方案按日期分组并将11:59:59 作为字符串添加到每个输出。然后转换为datetime,因此time col 中的每一行都有11:59:59 所以它会自动执行它,因为它会考虑同一日期内的所有值。谢谢。 @CarloAllocca 是的。 :) 仅在日期上分组并将一天中的最大时间附加到时间列【参考方案2】:

您可以使用Resample

>>>df['time'] = df['time'].astype('datetime64[ns]')    
>>>df.resample('D', on='time').mean()
>>>        
time         value
2018-08-02  3.666667
2018-08-03  3.666667

【讨论】:

以上是关于如何按天聚合熊猫数据框的主要内容,如果未能解决你的问题,请参考以下文章

如何通过使用数据框中的其他列来聚合熊猫数据框中的列

将分组的聚合唯一列添加到熊猫数据框

通过熊猫中的字符串列聚合数据框[重复]

分区上的聚合 - 熊猫数据框

如何在主表上加入按天聚合的数据

熊猫数据框中的行排序和聚合