Pandas 在列中查找连续非负数的块
我有一个如下所示的数据框:Pandas 在列中查找连续非负数的块,pandas,python-3.5,Pandas,Python 3.5,我有一个如下所示的数据框: DateTime Rev 8/9/2019 4:00 -1976 8/9/2019 6:00 -1953 8/9/2019 7:00 -1838 8/9/2019 8:00 0 8/9/2019 11:00 0 8/9/2019 12:00 0 8/9/2019 13:00 -1945 8/9/2019 14:00 -2045 8/9/2019 15:00 -1976 8/9/2019 16:00 0 8/9/2019
DateTime Rev
8/9/2019 4:00 -1976
8/9/2019 6:00 -1953
8/9/2019 7:00 -1838
8/9/2019 8:00 0
8/9/2019 11:00 0
8/9/2019 12:00 0
8/9/2019 13:00 -1945
8/9/2019 14:00 -2045
8/9/2019 15:00 -1976
8/9/2019 16:00 0
8/9/2019 17:00 0
我想找到所有非零数据块的索引。i、 我需要从以上两个不同的数据帧中提取
DateTime Rev
8/9/2019 4:00 -1976
8/9/2019 6:00 -1953
8/9/2019 7:00 -1838
及
我不知道如何有效地处理这个问题。Ide正在为负conceutive值创建唯一的组,并在列表理解中创建
数据帧的列表:
m = df['Rev'].lt(0)
mask = m.ne(m.shift()).cumsum()[m]
dfs = [g for i, g in df.groupby(mask)]
print (dfs)
[ DateTime Rev
0 8/9/2019 4:00 -1976
1 8/9/2019 6:00 -1953
2 8/9/2019 7:00 -1838, DateTime Rev
6 8/9/2019 13:00 -1945
7 8/9/2019 14:00 -2045
8 8/9/2019 15:00 -1976]
详细信息:
print (mask)
0 1
1 1
2 1
6 3
7 3
8 3
Name: Rev, dtype: int32
检查组:
df['g'] = mask
print (df)
DateTime Rev g
0 8/9/2019 4:00 -1976 1.0
1 8/9/2019 6:00 -1953 1.0
2 8/9/2019 7:00 -1838 1.0
3 8/9/2019 8:00 0 NaN
4 8/9/2019 11:00 0 NaN
5 8/9/2019 12:00 0 NaN
6 8/9/2019 13:00 -1945 3.0
7 8/9/2019 14:00 -2045 3.0
8 8/9/2019 15:00 -1976 3.0
9 8/9/2019 16:00 0 NaN
10 8/9/2019 17:00 0 NaN
print (mask)
0 1
1 1
2 1
6 3
7 3
8 3
Name: Rev, dtype: int32
df['g'] = mask
print (df)
DateTime Rev g
0 8/9/2019 4:00 -1976 1.0
1 8/9/2019 6:00 -1953 1.0
2 8/9/2019 7:00 -1838 1.0
3 8/9/2019 8:00 0 NaN
4 8/9/2019 11:00 0 NaN
5 8/9/2019 12:00 0 NaN
6 8/9/2019 13:00 -1945 3.0
7 8/9/2019 14:00 -2045 3.0
8 8/9/2019 15:00 -1976 3.0
9 8/9/2019 16:00 0 NaN
10 8/9/2019 17:00 0 NaN