Сгруппируйте значения в столбце Pandas, затем отфильтруйте значения в другом столбце. - PullRequest
1 голос
/ 03 июля 2019

Pandas Dataframe выглядит так:

Col1 Col2

A    1
A    1
A    1
B    0
B    0
B    1
B    1
B    1
C    1
C    1
C    1
C    1

Я хотел сгруппировать все вместе в Col1, затем проверить Col2, чтобы увидеть, равны ли все значения для этой группы, т. Е. 1. В этом примере желаемый результат будет:

[A, C]

(потому что только у A и C все значения равны 1). Как мне это сделать?

Ответы [ 3 ]

5 голосов
/ 03 июля 2019

В вашем случае groupby с all

df.groupby('Col1').Col2.all().loc[lambda x : x ].index.tolist()
Out[350]: ['A', 'C']

или без groupby

df.loc[~df.Col1.isin(df.Col1[df.Col2.eq(0)]),'Col1'].unique()
Out[352]: array(['A', 'C'], dtype=object)

Из комментария

CS95: df.loc[df['Col2'].astype(bool).groupby(df['Col1']).transform('all'), 'Col1'].unique()

4 голосов
/ 03 июля 2019

Мы можем использовать all с groupby:

out = df.Col2.groupby(df.Col1).all()
out.index[out].tolist()
# ['A', 'C']
2 голосов
/ 03 июля 2019

Понимание

[k for k, d in df.Col2.eq(1).groupby(df.Col1) if d.all()]

['A', 'C']
...