如何使用时间戳与熊猫一起按小时分组数据帧

Fra*_*nco 5 python timestamp dataframe pandas pandas-groupby

我有以下带有时间戳索引的数据帧结构:

    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   
Run Code Online (Sandbox Code Playgroud)

我从时间戳创建日期:

data_frame['date'] = [datetime.datetime.fromtimestamp(d) for d in data_frame.time]
Run Code Online (Sandbox Code Playgroud)

结果:

    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
Run Code Online (Sandbox Code Playgroud)

我想按小时分组,同时获取除timestamp以外的所有值均值该值应该是分组开始的小时。所以这是我要存档的结果:

    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
Run Code Online (Sandbox Code Playgroud)

到目前为止,我得到的最接近答案是

data = data.groupby(data.date.dt.hour).mean()
Run Code Online (Sandbox Code Playgroud)

结果:

    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
Run Code Online (Sandbox Code Playgroud)

但我想不出如何保留考虑到grouby开始时间的时间戳。

小智 5

pd.DataFrame.resample在发布全天候解决方案后,我碰到了这个宝石。

# 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()
Run Code Online (Sandbox Code Playgroud)

或者groupbyGrouper如果您不想将时间用作索引,则可以使用with :

df = pd.DataFrame({'val':values, 'times':times})
df.groupby(pd.Grouper(level='times', freq='H')).median()
Run Code Online (Sandbox Code Playgroud)