拥有包含熊猫数据框中每日高温(以摄氏度为单位)的天气数据集,就像日期和每日高温一样简单(四舍五入到第十位值)。这是一个示例数据集:
data_dict = {
'dates': ['2023-07-01', '2023-07-02', '2023-07-03', '2023-07-04', '2023-07-05', '2023-07-06', '2023-07-07', '2023-07-08', '2023-07-09', '2023-07-10', '2023-07-11', '2023-07-12', '2023-07-13', '2023-07-14', '2023-07-15', '2023-07-16', '2023-07-17', '2023-07-18', '2023-07-19', '2023-07-20', '2023-07-21', '2023-07-22', '2023-07-23', '2023-07-24', '2023-07-25', '2023-07-26', '2023-07-27', '2023-07-28', '2023-07-29', '2023-07-30', '2023-07-31', '2023-08-01', '2023-08-02'],
'daily_high_temp': [39.1, 39.8, 40, 40.3, 40.4, 40.2, 40.4, 40.6, 41, 41.1, 40.9, 41.2, 40.9, 39.9, 41.2, 42, 42.3, 41.9, 40.7, 39.8, 41.1, 41.3, 40.9, 40.7, 40, 39.8, 41.2, 40.9, 39.6, 40.9, 41.4, 41.2, 41.4]
}
df = pd.DataFrame(data=data_dict)
想要创建另一个数据框列“extreme_highs”来记录多种条件下的极端高温。这些条件:
根据上面的数据和列出的条件,应该(希望)产生结果数据:
我已经在Excel中开发了一个解决方案,但是它很复杂。希望可以分享一个简单的“pythonic”解决方案,因为我很困惑!谢谢您的帮助!!!
使用滑动窗口,找到argmax并相应填充,然后移动窗口。
i = 0
while i < len(df):
if df.loc[i, 'daily_high_temp'] <= 40.0:
i += 1
else:
max_index = df.loc[i:i+3, 'daily_high_temp'].argmax()
df.loc[i+max_index, 'extreme_highs'] = df.loc[i+max_index, 'daily_high_temp']
i += max_index+6+1
df = df.fillna(0)