找到具有非连续值的timessteps

时间:2017-12-04 21:04:05

标签: python pandas time-series

我有一个很长的时间序列,表明一天干燥(没有下雨)或潮湿。部分时间表显示在这里:

androidviewclient

我需要找到干燥的时期,这意味着我想要找到连续干燥天数(超过一个干燥天数成功)的时期。因此,当只有干燥的一天成功时,我想将 DryDay 的值从1更改为0。像这样:

Date          DryDay  
2009-05-07    0    
2009-05-08    0  
2009-05-09    1  
2009-05-10    1  
2009-05-11    1  
2009-05-12    1  
2009-05-13    1
2009-05-14    0
2009-05-15    0
2009-05-16    0
2009-05-17    0
2009-05-18    1
2009-05-20    0
2009-05-21    1
2009-05-22    0
2009-05-23    1
2009-05-24    1
2009-05-25    1
2009-05-26    0
2009-05-27    0
2009-05-28    1
2009-05-29    1
2009-05-30    0
....

任何人都可以帮我解决如何使用Pandas做到这一点吗?

2 个答案:

答案 0 :(得分:0)

可能有更好的方法,但这里有一个,

df['DryDay'] = ((df['DryDay'] == 1) & ((df['DryDay'].shift() == 1) | (df['DryDay'].shift(-1) == 1))).astype(int)

    Date        DryDay
0   2009-05-07  0
1   2009-05-08  0
2   2009-05-09  1
3   2009-05-10  1
4   2009-05-11  1
5   2009-05-12  1
6   2009-05-13  1
7   2009-05-14  0
8   2009-05-15  0
9   2009-05-16  0
10  2009-05-17  0
11  2009-05-18  0
12  2009-05-20  0
13  2009-05-21  0
14  2009-05-22  0
15  2009-05-23  1
16  2009-05-24  1
17  2009-05-25  1
18  2009-05-26  0
19  2009-05-27  0
20  2009-05-28  1
21  2009-05-29  1
22  2009-05-30  0

答案 1 :(得分:0)

试试这个......

((df1.DryDay.rolling(2,min_periods=1).sum()>1)|(df1.DryDay.iloc[::-1].rolling(2,min_periods=1).sum()>1)).astype(int)
Out[95]: 
0     0
1     0
2     1
3     1
4     1
5     1
6     1
7     0
8     0
9     0
10    0
11    0
12    0
13    0
14    0
15    1
16    1
17    1
18    0
19    0
20    1
21    1
22    0
Name: DryDay, dtype: int32