簡體   English   中英

python pandas:每個工作日每小時平均得分

[英]python pandas: mean scores per hour per workday

我有一個有投票的數據庫。 這些投票記錄包括:“時間戳記;得分”

分數是整數。

我想創建一個熱圖,所以我想要一個數據框,其中包含每個工作日中每個小時的值,並且該時間段內所有得分的平均得分。

如果該工作日的小時內沒有任何值,則將平均值設置為0。

到目前為止,我來到這里:

gdf = pd.read_sql("select * from scores where survey_id='{}';    ".format(survey_id), self.db_conn)
gdf = gdf.set_index(['time_stamp'])
gdf.index = pd.to_datetime(gdf.index, unit='s')
if len(gdf) == 0:
  return None
gdf['weekday'] = gdf.index.weekday
# gdf['hour'] = gdf.index.hour
gdf = gdf.groupby(by=[gdf['weekday'], pd.Grouper(freq='H')]).agg(['mean']).fillna(0)

結果是:

                                score weekday hour
                             mean    mean mean
weekday time_stamp                                
0       2018-10-22 17:00:00  1.600000       0   17
1       2018-10-23 09:00:00  2.666667       1    9
2       2018-10-31 14:00:00  3.000000       2   14
        2018-10-31 19:00:00  4.000000       2   19

這會漏掉一周中其他所有小時,而平均值為0。

對我做錯了什么建議嗎?

謝謝 !! :)

我知道了:

這行得通,不知道它是否可以更短一些,但這確實可以做到:

  • 每個工作日的每個小時使用0值創建新的數據框。
  • 從數據庫附加值

<

    todays_date = datetime.datetime.now().date()
    index = pd.date_range(todays_date - datetime.timedelta(7), periods=7*24, freq='H')
    columns = ['user', 'survey_id', 'score']
    df_ = pd.DataFrame(index=index, columns=columns)
    df_ = df_.fillna(0)  # with 0s rather than NaNs
    gdf = pd.read_sql("select * from scores where survey_id='{}'; ".format(survey_id), self.db_conn)
    gdf = gdf.set_index(['time_stamp'])
    gdf.index = pd.to_datetime(gdf.index, unit='s')
    df_ = df_.append(gdf, ignore_index=False)  # ignoring index is optional

    if len(gdf) == 0:
        return None
    df_['weekday'] = df_.index.weekday
    df_['hour'] = df_.index.hour
    df_ = df_.groupby(by=[df_['weekday'], df_['hour']]).agg(['mean']).fillna(0)

暫無
暫無

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

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