pandas 如何在groupby之后按特定条件过滤行?

xesrikrc  于 2022-12-16  发布在  其他
关注(0)|答案(2)|浏览(180)

我想过滤掉groupby之后差值小于20的行。
这是我原来的table

A     B     Value
1     1       0
1     2       10
1     2       20
1     2       25
2     1       0
2     1       15
2     1       100

在“df.groupby(['A','B'])”之后,它将是

A     B     Value
1     1       0           
1     2       10
      2       20
      2       25
2     1       0
      1       15
      1       100

我想过滤那些差异小于20的行。
例如,
Group[A=1][B=1]row1没有上一行,因此过滤掉。
Group[A=1][B=2]row1没有上一行,因此过滤掉。
组[A=1][B=2]第2行的差异为10,因此保留该值。
组[A=2][B=1]第3行的差异为100,因此过滤掉。
我期望的结果是:

A     B     Value
1     2       20
1     2       25
2     1       15

下面是我的尝试:

df.groupby(['A', 'B']).filter(lambda x : (x['Value'] - x['Value'].shift(1) < 20).any())

但它不起作用。
任何建议都将不胜感激

j2qf4p5b

j2qf4p5b1#

做一个月一个月

out = df[df.groupby(['A','B']).Value.diff().lt(20)]
Out[398]: 
   A  B  Value
2  1  2     20
3  1  2     25
5  2  1     15
cwtwac6a

cwtwac6a2#

cond1 = df.groupby(['A', 'B'])['Value'].transform(lambda x: x.diff(1).lt(20))
df[cond1]

df[cond1]

A   B   Value
2   1   2   20
3   1   2   25
5   2   1   15

相关问题