Pandas:按 A 列对数据进行分组,按 B 列的现有值过滤 A

Use*_*123 1 python group-by pandas

我是 Pandas 的新手,想创建一个包含分组和过滤数据的新数据集。现在,我的数据集包含两列,如下所示(第一列带有 A、B 或 C,第二列带有值):

A 1 

A 2

A 3

A 4 

B 1

B 2

B 3 

C 4
Run Code Online (Sandbox Code Playgroud)

--> 现在我想按第一列 (A,B,C) 的键进行分组,并仅显示存在值 1 AND 2 的键。这样我的新数据集看起来像:

A 1

A 2

B 1

B 2
Run Code Online (Sandbox Code Playgroud)

到目前为止,我只能打印所有内容,但我不知道如何过滤:

for name, group in data.groupby('keys'):
   print(name)
   print(group)
Run Code Online (Sandbox Code Playgroud)

我很感激任何帮助!

Joe*_*Joe 5

您可以使用:

df = df.loc[(df['col2'] == 1) | (df['col2'] == 2)]
Run Code Online (Sandbox Code Playgroud)

然后过滤不包含这两个值的组:

df = df.groupby('col1').filter(lambda x: any(x['col2'] == 2))
df = df.groupby('col1').filter(lambda x: any(x['col2'] == 1))
Run Code Online (Sandbox Code Playgroud)

例子:

  col1  col2
0    A     1
1    A     2
2    A     3
3    A     4
4    B     1
5    B     2
6    B     3
7    C     4
8    C     1
Run Code Online (Sandbox Code Playgroud)

输出:

  col1  col2
0    A     1
1    A     2
4    B     1
5    B     2
Run Code Online (Sandbox Code Playgroud)