我真的需要一些帮助,但不知道该怎么做。我对编码相当陌生
我有一年(2018年)的帝国郡加利福尼亚州卡莱西科的每小时臭氧、CO、风和温度数据,我试图有效地计算每天臭氧的最大每日8小时平均值(MDA8)。我已复制了我的数据帧:
import pandas as pd
df = pd.DataFrame({'date': ['1-1-2018 00:00:00', '1-1-2018 01:00:00', '1-1-2018 02:00:00', '1-1-2018 03:00:00', '1-1-2018 04:00:00', '1-1-2018 05:00:00', '1-1-2018 06:00:00', '1-1-2018 07:00:00',
'1-1-2018 08:00:00', '1-1-2018 09:00:00', '1-1-2018 10:00:00', '1-1-2018 11:00:00', '1-1-2018 12:00:00', '1-1-2018 13:00:00', '1-1-2018 14:00:00', '1-1-2018 15:00:00',
'1-1-2018 16:00:00', '1-1-2018 17:00:00', '1-1-2018 18:00:00', '1-1-2018 19:00:00', '1-1-2018 20:00:00', '1-1-2018 21:00:00', '1-1-2018 22:00:00', '1-1-2018 23:00:00',
'1-2-2018 00:00:00', '1-2-2018 01:00:00', '1-2-2018 02:00:00', '1-2-2018 03:00:00', '1-2-2018 04:00:00', '1-2-2018 05:00:00', '1-2-2018 06:00:00', '1-2-2018 07:00:00',
'1-2-2018 08:00:00', '1-2-2018 09:00:00', '1-2-2018 10:00:00', '1-2-2018 11:00:00', '1-2-2018 12:00:00', '1-2-2018 13:00:00', '1-2-2018 14:00:00', '1-2-2018 15:00:00',
'1-2-2018 16:00:00', '1-2-2018 17:00:00', '1-2-2018 18:00:00', '1-2-2018 19:00:00', '1-2-2018 20:00:00', '1-2-2018 21:00:00', '1-2-2018 22:00:00', '1-2-2018 23:00:00'],
'ozone': [30.0, 32.1, 33.5, 33.7, 35.6, 34.8, 35.2, 36.1, 36.1, 36.3, 36.5, 37.2, 38.4, 39.9, 40.0, 42.1, 43.4, 42.5, 41.0, 40.0, 38.6, 36.6, 36.1, 36.6,
35.4, 33.0, 31.5, 32.6, 33.0, 33.8, 34.2, 35.1, 35.6, 36.2, 36.9, 37.5, 37.9, 38.3, 39.5, 40.5, 41.4, 42.8, 44.6, 44.0, 43.8, 42.1, 40.2, 39.9],
'temperature': [12.2, 12.2, 12.4, 12.1, 12.3, 12.5, 12.6, 12.8, 12.9, 13.1, 13.2, 13.4, 13.6, 13.7, 13.9, 13.9, 13.5, 13.2, 13.1, 13.1, 12.8, 12.8, 12.7, 12.7,
12.6, 12.4, 12.4, 12.3, 12.1, 12.5, 12.7, 12.7, 12.9, 13.0, 13.0, 13.3, 13.5, 13.6, 13.8, 13.9, 14.0, 13.9, 13.7, 13.6, 13.4, 13.1, 12.9, 12.8],
'wind speed': [3.1, 3.2, 3.3, 3.3, 2.3, 3.4, 3.4, 2.1, 3.6, 3.6, 3.5, 3.2, 3.1, 2.8, 2.7, 2.9, 2.4, 2.6, 2.4, 2.1, 2.5, 2.7, 2.3, 2.2,
2.5, 2.8, 2.5, 2.6, 2.4, 2.3, 5.1, 5.5, 5.2, 4.6, 4.1, 3.1, 3.2, 3.1, 3.2, 3.4, 3.1, 3.5, 3.7, 3.4, 3.2, 3.1, 3.5, 3.4],
'CO': [0.33, 0.31, 0.31, 0.34, 0.35, 0.31, 0.31, 0.33, 0.30, 0.29, 0.28, 0.28, 0.27, 0.24, 0.21, 0.22, 0.23, 0.25, 0.21, 0.28, 0.31, 0.23, 0.31, 0.29,
0.33, 0.31, 0.31, 0.34, 0.35, 0.31, 0.31, 0.33, 0.30, 0.29, 0.28, 0.28, 0.27, 0.24, 0.21, 0.22, 0.23, 0.25, 0.21, 0.28, 0.31, 0.23, 0.31, 0.29]},
index=['date'])
我创建了一个代码,用于计算臭氧的8小时滚动平均值,并找到每日最大值:
df['O3_mda8_3135'] = df.ozone.rolling('8H', min_periods=2).mean().shift(-4)
O3_mda8_3135 = df.groupby([date.month,date.day])['O3_mda8_3135'].max()
然而,在我的新数据框中,我还需要臭氧最大值出现的一天中某个小时的温度、CO和风值。我不知道怎么做。对于更小的数据帧,我尝试了:
np.isclose(df['O3_mda8_3135'], #####).argmax()
但我不能在一年中的每一天都单独这样做,特别是在有重复值的情况下。是否存在某种循环代码,我可以尝试将最大臭氧浓度行拉入一个新的数据框,并拥有365行臭氧最大每日8小时平均值、CO、风和温度
我希望新的数据帧是:
df2 = pd.DataFrame({'date': ['1-1-2018 17:00:00', '1-2-2018 19:00:00'],
'ozone': [43.4, 44.6],
'temperature': [13.5, 13.7],
'wind speed': [2.4, 3.7],
'CO': [0.23, 0.21]})
基于从ozone列中提取的最大值,但在该最大值处显示相应日期时间的值
更新:我找到了这个函数
df.groupby([date.month, date.day])[O3_mda8_3135].idxmax(axis='columns')
这给了我最大臭氧值的日期时间戳,但是,它只显示时间戳,我想从相应的行中提取所有属性
由于您发布问题的方式,我无法复制您的数据,也无法清楚地了解您想要的输出,但我认为以下代码将使您更接近您想要的内容:
下面的代码可能会为您提供daily
max()
值,还将获得您在新数据框中概述的列请注意,我在这里写的'TEMP_col'、'CO_col'、'WIND_col'应该分别替换为您的温度/CO/WIND列的实际列名
GroupBy对象有一个
idxmax()
(和idxmin()
)方法,可用于返回每个组中最大值的索引。您可以使用此功能为原始数据编制索引:日期与您描述的输出不匹配,但我认为这些是正确的
另外,我在这里使用
dt.date
属性而不是dt.month
和dt.day
按日期执行groupby
相关问题 更多 >
编程相关推荐