在Python中选择每个客户端的当前行和上一行
我的数据框架如下所示,我希望为每个客户机提取行,其中Flag=1,并为同一客户机提取前一行(如果存在)。例如,第1行(我从1开始,不是0),2,3,6,7,8,10,11,12在Python中选择每个客户端的当前行和上一行,python,pandas,dataframe,numpy,group-by,Python,Pandas,Dataframe,Numpy,Group By,我的数据框架如下所示,我希望为每个客户机提取行,其中Flag=1,并为同一客户机提取前一行(如果存在)。例如,第1行(我从1开始,不是0),2,3,6,7,8,10,11,12 report_date customer_id Flag 01/01/20 1 0 02/01/20 1 1 03/01/20 1
report_date customer_id Flag
01/01/20 1 0
02/01/20 1 1
03/01/20 1 1
04/01/20 1 0
05/01/20 1 0
01/01/20 2 0
02/01/20 2 1
03/01/20 2 1
04/01/20 2 0
01/01/20 3 0
02/01/20 3 1
03/01/20 3 1
04/01/20 3 0
05/01/20 3 0
06/01/20 3 0
07/01/20 3 0
用于按组移动值,并与1
进行比较,对于按位或
的列,则按|
进行链比较:
df['prev'] = df.groupby('customer_id')['Flag'].shift(-1).eq(1) | df['Flag'].eq(1)
df['next'] = df.groupby('customer_id')['Flag'].shift().eq(1) | df['Flag'].eq(1)
print (df)
report_date customer_id Flag prev next
0 01/01/20 1 0 True False
1 02/01/20 1 1 True True
2 03/01/20 1 1 True True
3 04/01/20 1 0 False True
4 05/01/20 1 0 False False
5 01/01/20 2 0 True False
6 02/01/20 2 1 True True
7 03/01/20 2 1 True True
8 04/01/20 2 0 False True
9 01/01/20 3 0 True False
10 02/01/20 3 1 True True
11 03/01/20 3 1 True True
12 04/01/20 3 0 False True
13 05/01/20 3 0 False False
14 06/01/20 3 0 False False
15 07/01/20 3 0 False False