我有一个如下所示的DataFrame,我想在其中提取包含一行的组(名称:J,年龄:33)

X Y Name Age
1 3 J 33
1 3 A 47
1 4 B 53
1 4 X 22
2 3 J 33
2 3 P 80
2 4 V 90
2 4 V 93

总体而言,它将生成下表,因为1,3X/Y组包含J,33,而2,3X/Y组也包含J,33行.

X Y Name Age
1 3 J 33
1 3 A 47
2 3 J 33
2 3 P 80

我一直通过迭代行来解决这个问题,这太慢了,我想知道在Pandas中是否有更快的方法使用Groupby和Apply/PIPE方法.如有任何帮助,我们不胜感激

示例df如下:

df = pd.DataFrame({
    'X': [1,1,1,1,2,2,2,2],
    'Y': [3,3,4,4,3,3,4,4],
    'Name': ['J', 'A', 'B', 'X', 'V', 'P', 'J', 'V'],
    'Age': [33,47,53,22,33,80,33,93]
})

推荐答案

一种 Select 是使用Groupby:

# Get rows equal to ('J', 33)
check = df.loc(axis=1)[['Name','Age']].eq(('J', 33)).all(axis=1)
# run a groupby and get groups where True exists for any row in that group
check = check.groupby([df.X, df.Y]).transform('any')
#filter original dataframe
df.loc[check]

   X  Y Name  Age
0  1  3    J   33
1  1  3    A   47
4  2  3    J   33
5  2  3    P   80

另一个 Select ,仍然是Groupby:

group = df.groupby(['X','Y'])
cond1 = group.Name.transform(lambda x: any(x == 'J'))
cond2 = group.Age.transform(lambda x: any(x == 33))
df.loc[cond1 & cond2]
   X  Y Name  Age
0  1  3    J   33
1  1  3    A   47
4  2  3    J   33
5  2  3    P   80

Python-3.x相关问答推荐

如何获得大Pandas 的常见时间间隔

PythonPandas 创建一个列并添加到DataFrame

被多个\n拆分并保留

从Metacritic上通过网络擦除游戏数据的问题

检测点坐标 - opencv findContours()

Select 作为 MultiIndex 一部分的两个 DatetimeIndex 之间的行

以特定方式重新排列 pandas 数据框的列

torch.stack([t1, t1, t1], dim=1)与torch.hstack([t1, t1, t1])之间有什么区别?

两个 y 轴在零处对齐的 plotly barplot

如何通过 GitLab V4 api 列出 gitlab 项目中的所有项目变量

列出相同索引的Pandas

Python pandas将单元格值移动到同一行中的另一个单元格

Semaphore信号量 Python 的工作原理

Django 2 个字段之一不能为空

错误:预期语句,发现 py:Dedent

使用 Sympy 方程进行绘图

如何在 Python 中计算 cohen 的 d?

定义 True,如果没有定义,会导致语法错误

为 Python 3 和 PyQt 构建可执行文件

Python 3中星型导入的函数形式是什么