如果输入一个特定值后接另一个特定值,则从数据库中提取数据

时间:2019-02-11 14:27:24

标签: python mysql pandas

我在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

1 个答案:

答案 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紧随其后。