我有一只熊猫DF:-
start end ent
0 2 O
3 6 O
7 10 O
11 17 ABC
18 20 O
21 24 O
25 29 O
30 32 O
33 37 XYZ
38 41 XYZ
42 46 XYZ
47 50 O
51 55 O
56 59 O
60 64 O
65 67 O
68 72 O
72 75 O
76 79 O
79 82 O
82 85 O
目标是将行的“结束”值与行+1的“开始”值进行比较,如果它们相等,则以上结果将为:-
start end ent
0 2 O
3 6 O
7 10 O
11 17 ABC
18 20 O
21 24 O
25 29 O
30 32 O
33 37 XYZ
38 41 XYZ
42 46 XYZ
47 50 O
51 55 O
56 59 O
60 64 O
65 67 O
68 75 O
76 85 O
最后5行原始df已更改。
真的很感谢您的投入,谢谢。
答案 0 :(得分:2)
要获取先前的值,我们可以使用shift()
。识别这些块的常用技术是在cumsum
处于否定条件的情况下,然后使用groupby:
mask = df['start'] != df['end'].shift()
df.groupby(mask.cumsum()).agg({'start':'first', 'end':'last', 'ent':'first'})
输出:
start end ent
1 0 2 O
2 3 6 O
3 7 10 O
4 11 17 ABC
5 18 20 O
6 21 24 O
7 25 29 O
8 30 32 O
9 33 37 XYZ
10 38 41 XYZ
11 42 46 XYZ
12 47 50 O
13 51 55 O
14 56 59 O
15 60 64 O
16 65 67 O
17 68 75 O
18 76 85 O