![](/img/trans.png)
[英]Pandas resample on given (arbitrary) datetimeindex (using e.g. nearest)
[英]Python-pandas - Datetimeindex: What is the mosty pythonic strategy to analyse rolling with steps? (e.g. certain hours for each day)
我正在使用跨越几年的每小时温度数据的DateTimeIndex进行数据处理。 我想用了一天的20:00至次日 8:00之间,最低温度添加一列。 白天的温度-8:00至20:00-无关紧要。 结果可以是原始数据的每小时分辨率,也可以重新采样为几天。
我研究了许多策略来解决此问题,但是不确定最有效的方式(就主要的编码效率和辅助计算效率而言)分别是这样做的。 我想出了一些可能性:
df.index.hour
附加一个标签为“ day”,“ night”的列,并使用group_by
或df.loc
查找最小值 df.between_time
( https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.DataFrame.between_time.html#pandas.DataFrame.between_time ),尽管我不确定日期是否会更改午夜会使这有点混乱。 原始df如下所示:
datetime temp
2009-07-01 01:00:00 17.16
2009-07-01 02:00:00 16.64
2009-07-01 03:00:00 16.21 #<-- minimum for the night 2009-06-30 (previous date since periods starts 2009-06-30 20:00)
... ...
2019-06-24 22:00:00 14.03 #<-- minimum for the night 2019-06-24
2019-06-24 23:00:00 18.87
2019-06-25 00:00:00 17.85
2019-06-25 01:00:00 17.25
我想得到这样的东西(从20:00天到18:00天的最低温度):
datetime temp
2009-06-30 23:00:00 16.21
2009-07-01 00:00:00 16.21
2009-07-01 01:00:00 16.21
2009-07-01 02:00:00 16.21
2009-07-01 03:00:00 16.21
... ...
2019-06-24 22:00:00 14.03
2019-06-24 23:00:00 14.03
2019-06-25 00:00:00 14.03
2019-06-25 01:00:00 14.03
或更简洁:
datetime temp
2009-06-30 16.21
... ...
2019-06-24 14.03
使用base
选项resample
:
rs = df.resample('12h', base=8).min()
然后仅保留20:00的行:
rs[rs.index.hour == 20]
您可以将TimeGrouper
与freq=12h
和base=8
一起使用,从20:00-(+ day)08:00每12小时对数据帧进行分块,
那么你可以只使用.min()
尝试这个:
import pandas as pd
from io import StringIO
s = """
datetime temp
2009-07-01 01:00:00 17.16
2009-07-01 02:00:00 16.64
2009-07-01 03:00:00 16.21
2019-06-24 22:00:00 14.03
2019-06-24 23:00:00 18.87
2019-06-25 00:00:00 17.85
2019-06-25 01:00:00 17.25"""
df = pd.read_csv(StringIO(s), sep="\s\s+")
df['datetime'] = pd.to_datetime(df['datetime'])
result = df.sort_values('datetime').groupby(pd.Grouper(freq='12h', base=8, key='datetime')).min()['temp'].dropna()
print(result)
输出:
datetime
2009-06-30 20:00:00 16.21
2019-06-24 20:00:00 14.03
Name: temp, dtype: float64
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.