【问题标题】:Select rows with the same order of values in python dataframe?在python数据框中选择具有相同值顺序的行?
【发布时间】:2018-09-08 03:33:03
【问题描述】:

我正在处理包含 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

【问题讨论】:

    标签: python pandas dataframe


    【解决方案1】:

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

    【讨论】:

    • 谢谢!你的回答很有帮助
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-03-03
    • 1970-01-01
    • 1970-01-01
    • 2020-05-12
    • 1970-01-01
    • 1970-01-01
    • 2022-11-16
    相关资源
    最近更新 更多