如何按天聚合熊猫数据框
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
【讨论】:
以上是关于如何按天聚合熊猫数据框的主要内容,如果未能解决你的问题,请参考以下文章