熊猫:按A列对数据分组,按B列的现有值过滤A

时间:2018-07-17 09:26:45

标签: python pandas

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

A 1 

A 2

A 3

A 4 

B 1

B 2

B 3 

C 4

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

A 1

A 2

B 1

B 2

直到现在,我只能打印所有内容,但不知道如何过滤:

for name, group in data.groupby('keys'):
   print(name)
   print(group)

感谢您的帮助!

4 个答案:

答案 0 :(得分:0)

您可以使用:

df = df.loc[(df['col2'] == 1) | (df['col2'] == 2)]

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

df = df.groupby('col1').filter(lambda x: any(x['col2'] == 2))
df = df.groupby('col1').filter(lambda x: any(x['col2'] == 1))

示例:

  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

输出:

  col1  col2
0    A     1
1    A     2
4    B     1
5    B     2

答案 1 :(得分:0)

尝试一下

quill.enable(false);
quill.disable();

对于这个问题,您实际上不需要groupby,

如果您也想尝试一下,

l=[1,2]
print df[df['col2'].isin(l)]

答案 2 :(得分:0)

您真的不需要分组。 只需使用:

df = pd.DataFrame({'col_a': ['A','A','A','A', 'B','B','B', 'C'], 'col_b': [1,2,3,4,1,2,3,4]})
df.loc[(df.col_b == 1) | (df.col_b == 2)]

答案 3 :(得分:0)

过滤出所有值为'1'或'2'的键:

data = data.loc[ (data['value'] == 1) | (data['value'] == 2) ]

然后仅过滤出您要查看的键:

data = data.loc[ (data['key'] == 'A') | (data['key'] == 'B') ]