python - 如何提取垂直条件下的行

标签 python pandas dataframe

现在我有下面的数据框

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 - 检查每个 groupC 中的第一个和最后一个值不是 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/

相关文章:

python - 来自两个系列的笛卡尔积,不同的长度和索引

python - 使用 Selenium 获取元素的位置

python - '未找到 : /' error when linking app urls.py to project' s urls. py

python - 读取csv文件的小数问题

python - `pipenv install --index` 和 `pipenv install --pypi-mirror` 有什么区别?

python - 更改 Pandas Dataframe 中的数据类型

python - 如何在pyspark中使用pandas UDF并在StructType中返回结果

r - 从 data.frame 中自动提取 p 值

python - 有没有更快的方法来遍历和删除 Pandas 数据框中的特定行?

python - Pandas 合并并保留索引