我在MySQL中有一个数据库,其中的一列由不同类型的事件组成,我想将特定数据提取到python。例如:
数据库:
ID Event A
1 1 jdf
1 2 kfl
1 3 sdf
2 2 asd
2 1 sdf
2 4 asf
2 2 asas
2 3 aas
我要寻找的是,如果下一个事件为2,则使事件等于1,并创建一个新表。
输出:
ID Event A
1 1 jdf
1 2 kfl
2 1 sdf
2 2 asas
答案 0 :(得分:1)
shift
ones = df.Event.eq(1)
twos = df.Event.eq(2)
ones_then_twos = ones & twos.shift(-1)
mask = ones_then_twos | ones_then_twos.shift()
df[mask]
ID Event A
0 1 1 jdf
1 1 2 kfl
4 2 1 sdf
5 2 2 asas
ones_then_twos
向后移动twos
布尔序列一个,以确保我们有一个跟随1的两个。
ones_then_twos
0 True
1 False
2 False
3 False
4 True
5 False
6 False
Name: Event, dtype: bool
但是这只会得到后面跟两个的那些。我们还希望前面有两个。但是这些恰好在之后,因此我们向前移动相同的蒙版,并使用“或”将它们组合起来:
ones_then_twos | ones_then_twos.shift()
0 True
1 True
2 False
3 False
4 True
5 True
6 False
Name: Event, dtype: bool
这是我们使用的遮罩,您可以看到,对于{1}和{2}来说都是True
,而2紧随其后。