在python数据帧中选择具有相同值顺序的行?

时间:2018-03-29 08:44:05

标签: python pandas dataframe

我正在处理一个包含3个值'event1','event2'和'event3'的列事件的数据框。我正在寻找一种方法来选择具有特定顺序事件的行['event1','event2','event3']。

我试过了:

UPDATE tbl_agentwidgetconfig 
SET widget_config='hij'
WHERE agent_id=any(
  SELECT agent_id FROM tbl_agent
  WHERE agent_loginid='2man')
AND widget_id=5;

但结果是整个数据帧。

<Grid>
    <Grid>
        <TreeViewItem Name="itemScreen" />

1 个答案:

答案 0 :(得分:5)

你需要3个条件:

m = df.Events.eq('event1') 
    & df.Events.shift(-1).eq('event2')
    & df.Events.shift(-2).eq('event3')

现在将面具向前移动:

df[(m | m.shift() | m.shift(2))]

    Events          Time
4   event1  10:22:02.134
5   event2  06:52:48.184
6   event3  12:52:46.188
8   event1  13:33:46.235
9   event2  14:35:12.235
10  event3  14:59:12.177

对于任意数量的事件,您可以使用np.logical_and.reduce

进行推广
events = ['event1', 'event2', 'event3']
m = pd.Series(
    np.logical_and.reduce([
        df.Events.shift(-i).eq(e) for i, e in enumerate(events)
    ])
)

第二步后跟np.logical_or.reduce;

df[np.logical_or.reduce([
       m.shift(i).fillna(False) for i in range(len(events))
  ])
]

    Events          Time
4   event1  10:22:02.134
5   event2  06:52:48.184
6   event3  12:52:46.188
8   event1  13:33:46.235
9   event2  14:35:12.235
10  event3  14:59:12.177