gpt4 book ai didi

python - Pandas :时间序列数据:如何选择一小时或一天或一分钟的行?

转载 作者:太空宇宙 更新时间:2023-11-04 00:50:45 26 4
gpt4 key购买 nike

我在 .csv 文件中有大量时间序列数据集。文件中有两列:

  1. values:这些是示例值。
  2. dttm_utc:这些是收集样本时的时间戳。

我已使用 pd.read_csv(..., parse_dates=["dttm_utc"]) 将数据导入 pandas。当我打印 dttm_utc 列的前 50 行时,它们看起来像这样:

0    2012-01-01 00:05:00
1 2012-01-01 00:10:00
2 2012-01-01 00:15:00
3 2012-01-01 00:20:00
4 2012-01-01 00:25:00
5 2012-01-01 00:30:00
6 2012-01-01 00:35:00
7 2012-01-01 00:40:00
8 2012-01-01 00:45:00
9 2012-01-01 00:50:00
10 2012-01-01 00:55:00
11 2012-01-01 01:00:00
12 2012-01-01 01:05:00
13 2012-01-01 01:10:00
14 2012-01-01 01:15:00
15 2012-01-01 01:20:00
16 2012-01-01 01:25:00
17 2012-01-01 01:30:00
18 2012-01-01 01:35:00
19 2012-01-01 01:40:00
20 2012-01-01 01:45:00
21 2012-01-01 01:50:00
22 2012-01-01 01:55:00
23 2012-01-01 02:00:00
24 2012-01-01 02:05:00
25 2012-01-01 02:10:00
26 2012-01-01 02:15:00
27 2012-01-01 02:20:00
28 2012-01-01 02:25:00
29 2012-01-01 02:30:00
30 2012-01-01 02:35:00
31 2012-01-01 02:40:00
32 2012-01-01 02:45:00
33 2012-01-01 02:50:00
34 2012-01-01 02:55:00
35 2012-01-01 03:00:00
36 2012-01-01 03:05:00
37 2012-01-01 03:10:00
38 2012-01-01 03:15:00
39 2012-01-01 03:20:00
40 2012-01-01 03:25:00
41 2012-01-01 03:30:00
42 2012-01-01 03:35:00
43 2012-01-01 03:40:00
44 2012-01-01 03:45:00
45 2012-01-01 03:50:00
46 2012-01-01 03:55:00
47 2012-01-01 04:00:00
48 2012-01-01 04:05:00
49 2012-01-01 04:10:00
Name: dttm_utc, dtype: datetime64[ns]

现在,我想要实现的是:

  1. 基本上,我想将数据采样率降低到每小时一次。我想对第一个小时、第二个小时等的样本进行求和和平均,即我想对编号和 0-10 行的所有值求和并求平均,因为它们是在第一个小时收集的,接下来我会喜欢对第 11 行和第 22 行之间的数据进行求和和平均,依此类推。如何使用 pandas 命令实现此目的?

现在采样每 5 分钟进行一次,如果改为每 2 或 10 分钟一次,我希望我的解决方案仍然有效。

最佳答案

您的示例数据是一个系列,但您的问题是询问行的求和和平均值,因此我不清楚您在没有示例数据的情况下尝试求和和求平均的内容。

我认为您感兴趣的是重采样,但这只能在索引中包含日期时间列 (dttm_utc) 时完成。

s = pd.Series(pd.DatetimeIndex(start='2012-01-01 00:05:00', periods=50, 
freq=pd.offsets.Minute(n=5)), name='dttm_utc')
s.reset_index().set_index('dttm_utc').resample(pd.offsets.Hour()).agg([np.sum, np.mean])

给你这个...但它是一个多索引,这让事情变得更复杂。

                    index      
sum mean
dttm_utc
2012-01-01 00:00:00 55 5.0
2012-01-01 01:00:00 198 16.5
2012-01-01 02:00:00 342 28.5
2012-01-01 03:00:00 486 40.5
2012-01-01 04:00:00 144 48.0

如果你想删除多索引(多级列),你可以这样做:

new_s = s.reset_index().set_index('dttm_utc').resample(pd.offsets.Hour()).agg([np.sum, np.mean])
new_s.columns = new_s.columns.droplevel(level=0)

sum mean
dttm_utc
2012-01-01 00:00:00 55 5.0
2012-01-01 01:00:00 198 16.5
2012-01-01 02:00:00 342 28.5
2012-01-01 03:00:00 486 40.5
2012-01-01 04:00:00 144 48.0

关于python - Pandas :时间序列数据:如何选择一小时或一天或一分钟的行?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37266512/

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