python - 在 Pandas DataFrame 中查找具有特定特征的句点
问题描述
我有一个由 TimeStamp 索引的气象 DataFrame,我想在以下条件下找到 DataFrame 中存在的所有可能的 24 小时时段:
- 至少 6 小时的降雨量 > 10°C
- 至少连续 6 小时的相对湿度 > 90%。
考虑的小时数也可能“重叠”(RH > 90 和降雨量 > 0 的 6 小时就足够了)。
可以通过以下方式创建 48 小时的示例 DataFrame:
df = pd.DataFrame({'TimeStamp': pd.date_range('1/5/2015 00:00:00', periods=48, freq='H'),
'Temperature': np.random.choice( [11,12,13], 48),
'Rainfalls': [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.1,0.2,0.3,0.3,0.3,0.2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],
'RelativeHumidity': [95,95,95,95,95,95,80,80,80,80,80,80,80,80,85,85,85,85,85,85,85,85,80,80,80,80,80,80,80,80,80,80,80,80,80,80,80,80,80,80,80,80,80,80,80,80,80,80]})
df = df.set_index('TimeStamp')
在输出中,我只想要具有上述特征的每个时期开始的各种时间戳的索引。在样本 df 的情况下,输出中仅给出第一个 TimeStamp。
我曾尝试使用该df.rolling()
功能,但我只找到了 6 小时连续 RH > 90。
在此先感谢您的帮助。
解决方案
我希望我已经正确理解了你的问题。此示例将查找温度 > 10 和 RH > 90 且最小长度为 6 的所有组,然后打印这些组的第一个索引:
x = (df.Temperature > 10).astype(int) + (df.RelativeHumidity > 90).astype(int)
out = (
x.groupby((x != x.shift(1)).cumsum().values)
.apply(lambda x: x.index[0] if (x.iat[0] == 2) and len(x) > 5 else np.nan)
.dropna()
)
print(out)
印刷:
1 2015-01-05
dtype: datetime64[ns]
推荐阅读
- c - 为什么我使用指向指针的指针会出现内存访问冲突错误
- caching - 工作箱路由/缓存/删除/更新和服务工作者注册?
- java - 用java编写Html文件会重复条目
- swift - 从sidemenu用户类型明智地删除索引
- javascript - 如何从 html 文本中找到类
- gnuplot - 轴端显示10的幂
- python - 如果 Python 文件出现在文本文件中,则读取文本文件(包含 Python 文件名列表)并终止 Python 作业
- vue.js - vue界面缺少$router
- ios - 如何知道 iOS 应用程序的大小
- asp.net - 在jQuery中获取表asp.net中选定行的表列值