使用非连续值定位时间步长

2024-09-30 14:33:26 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个很长的时间序列表明一天是干燥(无雨)还是潮湿。部分时间序列如下所示:

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
....

我需要找到干燥期,这意味着我想找到连续干燥日(不止一个连续干燥日)的时期。因此,我想将干燥日的值从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    0
2009-05-20    0
2009-05-21    0
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
...

有人能帮我怎么处理熊猫吗


Tags: date时间序列时期无雨dryday
2条回答

试试这个

((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

也许有更好的办法,但这里有一个

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

相关问题 更多 >