我与此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
答案 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