繁体   English   中英

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

[英]Select rows with the same order of values in python dataframe?

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

我试过了:

df[df['Event'].isin(['event1', 'event2', 'event3'])]

但是结果是整个数据帧。

import pandas as pd
df = pd.DataFrame([['event1','01:22:52.134'],['event2','03:21:31.123'],  ['event1','21:12:52.544'],['event3','23:12:31.216'],['event1','10:22:02.134'],['event2','06:52:48.184'], ['event3','12:52:46.188'], ['event3','06:52:46.184'], ['event1','13:33:46.235'], ['event2','14:35:12.235'], ['event3','14:59:12.177']], columns=["Events",'Time']) 
df

您需要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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM