根据日期切片Pandas Dataframe - python

我有一个很大的数据框,其中包含日期,商店数量,已售单元和雨水总量。看起来像这样...

  date        store_nbr      units            preciptotal
  2014-10-11       1          0                0.00
  2014-10-12       1          0                0.01
  2014-10-13       1          2                0.00
  2014-10-14       1          1                2.13
  2014-10-15       1          0                0.00
  2014-10-16       1          0                0.87
  2014-10-17       1          3                0.01
  2014-10-18       1          0                0.40

我想在降水总量大于1的任何日期附近选择一个三天的窗口。对于这个小例子,我想返回前7行,即2014-10-14之前的三天,2014-10-14之后的三天。以及2014-10-14,因为它的序数大于1。

python大神给出的解决方案

对于特定值,您可以执行以下操作:

In [84]:

idx = df[df['preciptotal'] > 1].index[0]
df.iloc[idx-3: idx+4]
Out[84]:
        date  store_nbr  units  preciptotal
0 2014-10-11          1      0         0.00
1 2014-10-12          1      0         0.01
2 2014-10-13          1      2         0.00
3 2014-10-14          1      1         2.13
4 2014-10-15          1      0         0.00
5 2014-10-16          1      0         0.87
6 2014-10-17          1      3         0.01

对于更一般的情况,您可以获得满足条件的索引数组

idx_vals = df[df['preciptotal'] > 1].index

那么您可以生成切片或遍历数组值:

for idx in idx_values:
    df.iloc[idx-3: idx+4]

假设您的索引是一个基于0的int64索引,您的样本是