如何在pandas中选择条件原始序列

时间:2018-01-27 06:56:13

标签: pandas time-series conditional-statements

我有以下数据框... 我希望每天从b> 1000条件中选择序列12点

Date        Time     a      b    c
2018-01-09  5:15:00 20.55   0   -3.07
2018-01-09  5:30:00 20.57   10000   -3.07
2018-01-09  5:45:00 20.33   0   -3.44
2018-01-09  6:00:00 20.31   0   -2.95
2018-01-09  6:15:00 20.76   26738   -2.88
2018-01-09  6:30:00 21.4    22462   -2.77
2018-01-09  6:45:00 21.84   20033   -3
2018-01-09  7:00:00 22.17   20010   -3.28
2018-01-09  7:15:00 22.38   18133   -2.82
2018-01-09  7:30:00 22.75   18254   -3.14
2018-01-09  7:45:00 22.93   17039   -3.22
2018-01-09  8:00:00 23.13   15934   -3.27
2018-01-09  8:15:00 23.25   15438   -3.48
2018-01-09  8:30:00 23.44   16218   -3.65
2018-01-09  8:45:00 23.65   14666   -3.14
2018-01-09  9:00:00 24.01   14686   -3.1
.....

必须是b> 1000条件下的12个连续点 结果

  Date        Time     a      b    c
    2018-01-09  5:30:00 20.57   10000   -3.07
    2018-01-09  5:45:00 20.33   0   -3.44
    2018-01-09  6:00:00 20.31   0   -2.95
    2018-01-09  6:15:00 20.76   26738   -2.88
    2018-01-09  6:30:00 21.4    22462   -2.77
    2018-01-09  6:45:00 21.84   20033   -3
    2018-01-09  7:00:00 22.17   20010   -3.28
    2018-01-09  7:15:00 22.38   18133   -2.82
    2018-01-09  7:30:00 22.75   18254   -3.14
    2018-01-09  7:45:00 22.93   17039   -3.22
    2018-01-09  8:00:00 23.13   15934   -3.27
    2018-01-09  8:15:00 23.25   15438   -3.48
    .....

我怎样才能实现它?

1 个答案:

答案 0 :(得分:2)

我认为您需要按boolean indexing进行过滤,然后按GroupBy.head每天选择12行。

条件在第一个值b > 1000之后每天选择所有行。

#changed data with multiple days for better test
print (df)
          Date     Time      a      b     c
0   2018-01-09  5:15:00  20.55      0 -3.07
1   2018-01-09  5:30:00  20.57  10000 -3.07
2   2018-01-09  5:45:00  20.33      0 -3.44
3   2018-01-09  6:00:00  20.31      0 -2.95
4   2018-01-09  6:15:00  20.76  26738 -2.88
5   2018-01-09  6:30:00  21.40  22462 -2.77
6   2018-01-09  6:45:00  21.84  20033 -3.00
7   2018-02-09  7:00:00  22.17    100 -3.28
8   2018-02-09  7:15:00  22.38      0 -2.82
9   2018-02-09  7:30:00  22.75  18254 -3.14
10  2018-02-09  7:45:00  22.93      0 -3.22
11  2018-02-09  8:00:00  23.13      0 -3.27
12  2018-02-09  8:15:00  23.25  15438 -3.48
13  2018-02-09  8:30:00  23.44  16218 -3.65
14  2018-02-09  8:45:00  23.65  14666 -3.14
15  2018-02-09  9:00:00  24.01  14686 -3.10
m = df['b'].gt(1000).groupby(df.index.get_level_values(0)).cumsum().gt(0)
df = df[m].groupby('Date').head(12)
print (df)
          Date     Time      a      b     c
1   2018-01-09  5:30:00  20.57  10000 -3.07
2   2018-01-09  5:45:00  20.33      0 -3.44
3   2018-01-09  6:00:00  20.31      0 -2.95
4   2018-01-09  6:15:00  20.76  26738 -2.88
5   2018-01-09  6:30:00  21.40  22462 -2.77
6   2018-01-09  6:45:00  21.84  20033 -3.00
9   2018-02-09  7:30:00  22.75  18254 -3.14
10  2018-02-09  7:45:00  22.93      0 -3.22
11  2018-02-09  8:00:00  23.13      0 -3.27
12  2018-02-09  8:15:00  23.25  15438 -3.48
13  2018-02-09  8:30:00  23.44  16218 -3.65
14  2018-02-09  8:45:00  23.65  14666 -3.14
15  2018-02-09  9:00:00  24.01  14686 -3.10