gpt4 book ai didi

python Pandas : mean scores per hour per workday

转载 作者:太空宇宙 更新时间:2023-11-03 21:31:35 25 4
gpt4 key购买 nike

我有一个包含选票的数据库。这些投票记录包括:“时间戳;分数”

分数是一个整数。

我想创建一个热图,所以我想要一个数据框,其中包含每个工作日每个小时的值以及该时间范围内所有分数的平均分。

如果该工作日的某个小时内没有值,则将平均值设置为 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)

关于 python Pandas : mean scores per hour per workday,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53482450/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com