在pandas中的条件下,选择条件后面的行

rbpvctlc  于 2023-09-29  发布在  其他
关注(0)|答案(2)|浏览(126)

我有一个dataframe,看起来像这样:

import pandas as pd
pd.DataFrame({'id': [1,1,1,1,2,2,2,2], 
             'time': [1,2,3,4,1,2,5,6],
             'is': [0,1,0,0,0,1,0,0]})

id  time    is
0   1   1   0
1   1   2   1
2   1   3   0
3   1   4   0
4   2   1   0
5   2   2   1
6   2   5   0
7   2   6   0

sorted乘以idtime
对于每个id,只选择至少满足以下两个条件之一的行:

  • is==1
  • 在这两行之间的行is==1time之后的行不具有间隙。

生成的嵌套框架应该如下所示:

pd.DataFrame({'id': [1,1,2], 
             'time': [2,3,2],
             'is': [1,0,1]})

我怎么能这么做

zbdgwd5y

zbdgwd5y1#

可以使用groupby.shift

# form groups
g = df.groupby('id')

# select rows with is==1 and the next ones (per group)
m1 = df['is'].eq(1) | g['is'].shift().eq(1)
# select rows with successive time
m2 = g['time'].diff().eq(1)

out = df[m1&m2]

输出量:

id  time  is
1   1     2   1
2   1     3   0
5   2     2   1
nxagd54h

nxagd54h2#

验证码

cond1 = df['is'].eq(1)
cond2 = df.groupby('id')['time'].diff().le(1)
df[cond1 | (cond2 & cond1.groupby(df['id']).shift())]

产出:

id  time    is
1   1   2   1
2   1   3   0
5   2   2   1

相关问题