簡體   English   中英

Dataframe 來自按工作日和小時分組的系列

[英]Dataframe from Series grouped by weekday and hour of day

我有一個帶有 DatetimeIndex 的系列,例如:

time                   my_values
2017-12-20 09:00:00    0.005611
2017-12-20 10:00:00   -0.004704
2017-12-20 11:00:00    0.002980
2017-12-20 12:00:00    0.001497
                         ...   
2021-08-20 13:00:00   -0.001084
2021-08-20 14:00:00   -0.001608
2021-08-20 15:00:00   -0.002182
2021-08-20 16:00:00   -0.012891
2021-08-20 17:00:00    0.002711

我想創建一個平均值的 dataframe ,其中工作日作為列名,一天中的小時作為索引,結果如下:

hour  Monday      Tuesday    ...   Sunday
0     0.005611   -0.001083        -0.003467
1    -0.004704    0.003362        -0.002357
2     0.002980    0.019443         0.009814
3     0.001497   -0.002967        -0.003466
        ...    
19    -0.001084   0.009822         0.003362
20    -0.001608  -0.002967        -0.003567
21    -0.002182   0.035600        -0.003865
22    -0.012891   0.002945        -0.002345
23     0.002711  -0.002458         0.006467

如何在 Python 中做到這一點?

# Coerce time to datetime
df['time'] = pd.to_datetime(df['time'])

# Extract day and hour
df = df.assign(day=df['time'].dt.strftime('%A'), hour=df['time'].dt.hour)

# Pivot
df.pivot(index='hour', columns='day', values='my_values').reset_index()

由於您要求返回平均值的解決方案,因此我建議使用此groupby解決方案

df["weekday"] = DF.time.dt.strftime('%A')
df["hour"] = DF.time.dt.strftime('%H')

df = df.drop(["time"], axis=1)

# calculate averages by weekday and hour
df2 = DF.groupby(["weekday", "hour"]).mean()

# put it in the right format
df2.reindex(["hour", "weekday"]).unstack()

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM