如何使用Pandas的时间戳按小时分组数据帧

2024-10-06 16:15:48 发布

您现在位置:Python中文网/ 问答频道 /正文

我有以下数据帧结构,它是用时间戳索引的:

    neg neu norm    pol pos date
time                        
1520353341  0.000   1.000   0.0000  0.000000    0.000   
1520353342  0.121   0.879   -0.2960 0.347851    0.000   
1520353342  0.217   0.783   -0.6124 0.465833    0.000   

我根据时间戳创建一个日期:

^{pr2}$

结果:

    neg neu norm    pol pos date
time                        
1520353341  0.000   1.000   0.0000  0.000000    0.000   2018-03-06 10:22:21
1520353342  0.121   0.879   -0.2960 0.347851    0.000   2018-03-06 10:22:22
1520353342  0.217   0.783   -0.6124 0.465833    0.000   2018-03-06 10:22:22

我想按小时分组,同时获取所有值的平均值,除了时间戳,它应该是组开始的小时。所以这是我想要归档的结果:

    neg neu norm    pol pos
time                    
1520352000  0.027989    0.893233    0.122535    0.221079    0.078779
1520355600  0.028861    0.899321    0.103698    0.209353    0.071811

到目前为止,我得到的最接近的是这个answer

data = data.groupby(data.date.dt.hour).mean()

结果:

    neg neu norm    pol pos
date                    
0   0.027989    0.893233    0.122535    0.221079    0.078779
1   0.028861    0.899321    0.103698    0.209353    0.071811

但是我想不出如何保持时间戳,它考虑到了格鲁比的开始时间。在


Tags: 数据answerposnormdatadatetime时间
3条回答

我在发布了我的按小时计算的解决方案后,偶然发现了这个宝石^{}。在

# Construct example dataframe
times = pd.date_range('1/1/2018', periods=5, freq='25min')
values = [4,8,3,4,1]
df = pd.DataFrame({'val':values}, index=times)

# Resample by hour and calculate medians
df.resample('H').median()

或者,如果不想将时间作为索引,可以将^{}^{}一起使用:

^{pr2}$

您可以将时间戳列向下舍入到最接近的小时:

import math
df.time = [math.floor(t/3600) * 3600 for t in df.time]

或者更简单,使用整数除法:

^{pr2}$

您可以按此列分组,从而保留时间戳。在

您是否尝试通过以下方式创建小时列:

data_frame['hour'] = data_frame.date.dt.hour

然后按小时分组如下:

^{pr2}$

相关问题 更多 >