如何从熊猫数据框中满足条件的位置获得上一行

时间:2020-10-01 00:03:17

标签: python pandas dataframe

我与此link上的问题非常相似,唯一的区别是要满足多个条件。

让我们假设我们具有(排序的)数据框,类似于示例中的数据框,并具有额外的列:

    TIME    VALUE    EXTRA_FILTER
0   23:01   0        A
1   23:02   0        A
2   23:03   1        A
3   23:04   0        B
4   23:05   0        B
5   23:06   1        B
6   23:07   0        A
7   23:08   0        A
8   23:09   0        A
9   23:10   0        A
10  23:11   1        A
11  23:12   0        A      
12  23:13   0        A
13  23:14   0        A
14  23:15   0        A
15  23:16   1        A

我想在每行旁边增加一个称为PREV_TIME的列,其中将包含TIME列的前一个值,在这两个条件下,列VALUE等于1的两个条件都满足,且EXTRA_FILTER列等于A的条件都得到满足,像这样的东西:

TIME    VALUE    EXTRA_FILTER    PREV_TIME
0   23:01   0        A            
1   23:02   0        A
2   23:03   1        A
3   23:04   0        B
4   23:05   0        B
5   23:06   1        B
6   23:07   0        A
7   23:08   0        A
8   23:09   0        A
9   23:10   0        A
10  23:11   1        A             23:03
11  23:12   0        A      
12  23:13   0        A
13  23:14   0        A
14  23:15   0        A
15  23:16   1        A             23:11

1 个答案:

答案 0 :(得分:1)

IIUC,使用pandas.Series.shift

df["PREV_TIME"] = df[df["VALUE"].eq(1) & df["EXTRA_FILTER"].eq("A")]["TIME"].shift()
df["PREV_TIME"].fillna("", inplace=True)
print(df)

输出:

     TIME  VALUE EXTRA_FILTER PREV_TIME
0   23:01      0            A          
1   23:02      0            A          
2   23:03      1            A          
3   23:04      0            B          
4   23:05      0            B          
5   23:06      1            B          
6   23:07      0            A          
7   23:08      0            A          
8   23:09      0            A          
9   23:10      0            A          
10  23:11      1            A     23:03
11  23:12      0            A          
12  23:13      0            A          
13  23:14      0            A          
14  23:15      0            A          
15  23:16      1            A     23:11
相关问题