gpt4 book ai didi

python - Pandas : How to aggregate hourly count with time start and end

转载 作者:行者123 更新时间:2023-12-04 01:25:31 25 4
gpt4 key购买 nike

我有一个数据框,其中包含每个唯一评级 ID 的开始和结束时间。

d={'ID':['01','02','03','04','05','06'],'Hour Start':[5,9,13,15,20,23],'Hour End':[6,9,15,19,0,2]}
df=pd.DataFrame(data=d)

我的目标是汇总整个数据集每小时活跃的评分数量。例如,ID:01 在早上 5 点和早上 6 点开始。那么早上 5 点和早上 6 点都应该各加 1 个计数。

但是对于ID:06,评分从晚上11点开始,到次日凌晨2点结束。因此,从晚上 11 点到凌晨 2 点,每小时应该增加 1 个计数。

我想输出一个如下所示的每小时汇总表。

enter image description here

我一直在思考解决方案。

任何帮助将不胜感激!谢谢!

最佳答案

您可以将小时开始和结束列都转换为日期时间。然后你计算时间差。最后,将时差转换为小时差(秒除以 3600):

df['Hours_s'] = pd.to_datetime(df['Hour Start'], format='%H' )
df['Hours_e'] = pd.to_datetime(df['Hour End'], format='%H' )
df['delta'] = df['Hours_e']-df['Hours_s']
df["count"] = df["delta"].apply(lambda x: x.seconds//3600)

输出:

ID   Hour_Start Hour_End count
0 5 6 1
1 9 9 0
2 13 15 2
3 15 19 4
4 20 0 4
5 23 2 3

更新:

final_tab = pd.DataFrame({"Hour": range(0,24), "Count": [0]*24})

for i, row in df.iterrows():
if row["delta"].days != 0:
final_tab.iloc[row["Hour Start"]:24,1] =final_tab.iloc[row["Hour Start"]:24,1] +1
final_tab.iloc[0:row["Hour End"]+1,1] =final_tab.iloc[0:row["Hour End"]+1,1] +1
else:
final_tab.iloc[row["Hour Start"]:row["Hour Start"]+row["count"],1] = final_tab.iloc[row["Hour Start"]:row["Hour Start"]+row["count"],1] + 1

输出:

print(final_tab)
Hour Count
0 0 2
1 1 1
2 2 1
3 3 0
4 4 0
5 5 1
6 6 1
7 7 0
8 8 0
9 9 1
10 10 0
11 11 0
12 12 0
13 13 1
14 14 1
15 15 2
16 16 1
17 17 1
18 18 1
19 19 1
20 20 1
21 21 1
22 22 1
23 23 2

关于python - Pandas : How to aggregate hourly count with time start and end,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62002364/

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