熊猫按时间滚动均值和选择性索引

时间:2017-12-06 10:12:09

标签: python pandas

我有一个数据集,我根据日期(datetime.datetime)重新编制了索引。数据帧的一小部分样本如下所示:df2:

                                lat          lon        Press   NetLW
rounded_dt 1997-11-30 17:00:00  76.15387    -147.62606  998.8   -51.0
           1997-11-30 18:00:00  76.15280    -147.60379  1000.0  -50.9
           1997-11-30 19:00:00  76.15164    -147.58055  1001.1  -54.4
           1997-11-30 20:00:00  76.15037    -147.56047  1002.6  -52.2
           1997-11-30 21:00:00  76.14948    -147.54034  1004.2  -51.9
           1997-11-30 22:00:00  76.14834    -147.52181  1005.5  -51.3
           1997-11-30 23:00:00  76.14777    -147.50568  1006.5  -50.7
           1997-12-01 06:00:00  76.14152    -147.42073  1013.3  -44.6
           1997-12-01 07:00:00  76.14105    -147.41370  1013.8  -45.4
           1997-12-01 08:00:00  76.14072    -147.40661  1014.5  -46.1
           1997-12-01 09:00:00  76.14059    -147.40093  1015.0  -43.0

所以时间序列是每小时每天持续一年。

我的目标是什么?

我想基于NetLW在特定的天数范围内提取数据,而这些天只有11小时和23小时。但是那时的NetLW让我们说11小时应该是NetLW(10小时),NetLW(11小时)和NetLW(12小时)的平均值。

到目前为止我做了什么?

df3 = df2.rolling(window=3, center=True).mean() # to get the rolling mean
# I want to extract the dates of interest from df3
dates_list =[]
for idx in df2.index:
    # Winter dates (Dec-March)
    if idx > datetime.datetime(1997, 11, 30, 23) and idx < datetime.datetime(1998, 3, 1, 0): 
       if idx.hour ==11 or idx.hour == 23:
          dates_list.append(df3[df3.loc[idx, 'NetLW'] < -30.0])    

然后我可以在一个系列/数据框中连接dates_list并获取日期

错误消息 KeyError:True

在处理上述异常期间,发生了另一个异常

它指向这一行:

---&GT; dates_list.append(df3 [df3.loc [idx,'NetLW']&lt; -30.0])

我期望使用布尔dtype将其用作df3的索引并提取数据。

另外,如果可以按我感兴趣的时间进行分组而不是编写多个循环,那么请告诉我,因为我是Pandas的新手。

1 个答案:

答案 0 :(得分:1)

数据框中的布尔索引通常需要您使用.loc索引器。但是这里发生的事情是,在循环时只有一个索引。自由翻译:{{1​​}}。我恐怕你的索引中没有一行叫df3_clear = df3[True or False]True

你正在寻找的东西似乎是(可能是一个oneliner,但我有点懒):

False