【发布时间】:2023-03-12 07:15:01
【问题描述】:
我有一个带有 date 和 value 列的气象观测时间序列:
df = pd.DataFrame({'date':['11/10/2017 0:00','11/10/2017 03:00','11/10/2017 06:00','11/10/2017 09:00','11/10/2017 12:00',
'11/11/2017 0:00','11/11/2017 03:00','11/11/2017 06:00','11/11/2017 09:00','11/11/2017 12:00',
'11/12/2017 00:00','11/12/2017 03:00','11/12/2017 06:00','11/12/2017 09:00','11/12/2017 12:00'],
'value':[850,np.nan,np.nan,np.nan,np.nan,500,650,780,np.nan,800,350,690,780,np.nan,np.nan],
'consecutive_hour': [ 3,0,0,0,0,3,6,9,0,3,3,6,9,0,0]})
有了这个DataFrame,我想要consecutive_hours的第三列,这样如果特定时间戳中的值小于1000,我们在“3:00”的“连续小时”中给出相应的值" 小时并找到连续的此类事件,如 6:00 9:00 如上所述。
最后,我想汇总计算连续小时数发生次数和天数的表格,以便汇总表格如下所示:
df_summary = pd.DataFrame({'consecutive_hours':[3,6,9,12],
'number_of_day':[2,0,2,0]})
我尝试了几种在线解决方案和方法,如 shift()、diff() 等,如:How to groupby consecutive values in pandas DataFrame
还有更多,花了几天但还没有运气。
非常感谢您在此问题上的帮助。 谢谢!
【问题讨论】:
-
consecutive_hour列是预期结果吗?如果是,请解释一下为什么2017-11-11 06:00:00和12 2017-11-12 06:00:00是9 而2017-11-10 06:00:00是0。 -
Yes Continuous_hour 列是预期结果。
-
是的,continuous_hour 列是预期结果。 2017-11-11 06:00:00 是 9,因为如果您查看值列,您会看到值:500,650 和 780 在三行中连续出现,直到时间戳 2017-11-11 06:00:00 .同样的逻辑适用于 2017-11-12 06:00:00。并且 2017-11-10 06:00:00 具有 0 连续小时 值,因为在此时间戳和 2017-11-10 03:00:00 中有 Nan 值。
-
您确定
df_summary吗?我找到了{3: 3, 6: 2, 9: 2, 12: 0} -
是的,这就像:consecutive_hour == 3(单独)发生在 2017-11-10 00:00:00 和 2017:11:11 12:00:00对于不同的一天,计数 3 连续小时 等于 2。2017 年 11 月 11 日和 2017 年 11 月 12 日的最高连续值为 9,同样使 9 的计数等于 2。没有一天有**连续时间**最高的 6 小时或 12 小时;所以它们等于 0。