现在我有下面的数据框
A B C
1 a 1
1 b 0
1 c 0
1 d 1
2 e 1
2 f 1
2 g 0
3 h 1
3 i 0
3 j 1
3 k 1
我想在 df.C 条件下提取
在 df.A 的每个数字中,例如数字 1
df.query("A==1")=
A B C
1 a 1
1 b 0
1 c 1
1 d 1
在 df.C 中,数字 1 夹在一个或多个零之间。
df.query("A==1").C=
1
0
1
1
因此该帧被提取。
但是框架 df.query("A==2") 与上述条件不匹配。
总之,我想要下面的数据框
A B C
1 a 1
1 b 0
1 c 0
1 d 1
3 h 1
3 i 0
3 j 1
3 k 1
最佳答案
您可以使用filtration - 检查每个 group
中 C
中的第一个和最后一个值不是 0
:
print (df)
A B C
0 1 a 1
1 1 b 0
2 1 c 0
3 1 d 1
4 2 e 1
5 2 f 1
6 2 g 0
7 3 h 1
8 3 i 1
9 3 j 0
10 3 k 1
11 4 j 0
12 4 k 0
13 4 k 1
df = df.groupby('A').filter(lambda x: not (x.C.iat[0] == 0 or x.C.iat[-1] == 0))
print (df)
A B C
0 1 a 1
1 1 b 0
2 1 c 0
3 1 d 1
7 3 h 1
8 3 i 1
9 3 j 0
10 3 k 1
但是如果在某个组中可能不是0
,您也必须检查它:
df = df.groupby('A')
.filter(lambda x: not (x.C.iat[0] == 0 or x.C.iat[-1] == 0) and (x.C == 0).any())
关于python - 如何提取垂直条件下的行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41870787/