gpt4 book ai didi

python - 如何将此 DataFrame 中的信息表示为时间序列?

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

我有一个看起来像这样的 pandas DataFrame:

             start_time             end_time    user
0 2016-12-17 03:10:07 2016-12-17 03:18:10 andrew
1 2016-12-17 03:11:07 2016-12-17 03:15:07 eddie
2 2016-12-17 03:12:08 2016-12-17 03:19:08 andrew
3 2016-12-17 03:13:08 2016-12-17 03:14:06 eddie
...

每一行代表一个提交给计算集群的作业。 start_time 是计划作业开始运行的时间,end_time 是它完成的时间。

我如何创建一个按时间索引的新 DataFrame,它描述了每个用户在给定时刻运行了多少个作业?

最佳答案

这是一个相当有趣的问题。基本上每个用户都有两个独立的时间序列。第一步是添加一个简单的列,仅指示发生的事情(列 event)。该策略是对数据进行透视,使得行是时间,列是用户,事件是值。

要创建完整的时间序列,我们需要对时间序列重新采样(在本例中我使用了 1 秒)并用 0 填充缺失值(因为没有事件发生。.min()。 fillna(0) 是用 NA 填充数据框,然后用零填充数据框,我认为您可以使用 apply(lambda x:...)

简化此操作
df['event'] = 1
df_starts = df.pivot('start_time', 'user', 'event').fillna(0).resample('1S').min().fillna(0)
df_stops = df.pivot('end_time', 'user', 'event').fillna(0).resample('1S').min().fillna(0)

接下来我们从两个新的数据帧创建一个完整的索引,因为索引有不重叠的部分。然后使用新索引重新索引两个数据帧。

full_index = df_starts.index.union(df_stops.index)

df_starts = df_starts.reindex(full_index, fill_value=0)
df_stops = df_stops.reindex(full_index, fill_value=0)

最后,从开始事件中减去停止事件构建一个包含所有事件的数据框。开始为正 1,停止为负 1。使用 .cumsum() 获取每个用户在任何给定时间的总运行进程。

df_change = df_starts - df_stops
df_running = df_change.cumsum()

这是 df_running 的快速绘图,x 轴是自第一个事件以来的秒数。

enter image description here

关于python - 如何将此 DataFrame 中的信息表示为时间序列?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41204618/

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