Pandas Dataframe Найти строки, где все столбцы равны - программирование
Подтвердить что ты не робот

Pandas Dataframe Найти строки, где все столбцы равны

У меня есть фреймворк с символами в нем - мне нужен логический результат по строке, который говорит мне, что все столбцы для этой строки имеют одинаковое значение.

Например, у меня есть

df = [  a   b   c   d

0  'C'   'C'   'C'   'C' 

1  'C'   'C'   'A'   'A'

2  'A'   'A'   'A'   'A' ]

и я хочу, чтобы результат был

0  True

1  False

2  True

Я пробовал .all, но, похоже, я могу проверить только, все ли они равны одной букве. Единственный другой способ, который я могу придумать, - сделать уникальную на каждой строке и посмотреть, равен ли это 1? Спасибо заранее.

4b9b3361

Ответ 1

Я думаю, что самый чистый способ - проверить все столбцы на первый столбец, используя eq:

In [11]: df
Out[11]: 
   a  b  c  d
0  C  C  C  C
1  C  C  A  A
2  A  A  A  A

In [12]: df.iloc[:, 0]
Out[12]: 
0    C
1    C
2    A
Name: a, dtype: object

In [13]: df.eq(df.iloc[:, 0], axis=0)
Out[13]: 
      a     b      c      d
0  True  True   True   True
1  True  True  False  False
2  True  True   True   True

Теперь вы можете использовать все (если все они равны первому элементу, все они равны):

In [14]: df.eq(df.iloc[:, 0], axis=0).all(1)
Out[14]: 
0     True
1    False
2     True
dtype: bool

Ответ 2

df = pd.DataFrame.from_dict({'a':'C C A'.split(),
                        'b':'C C A'.split(),
                        'c':'C A A'.split(),
                        'd':'C A A'.split()})
df.apply(lambda x: len(set(x)) == 1, axis=1)
0     True
1    False
2     True
dtype: bool

Объяснение: set (x) имеет только 1 элемент, если все элементы строки одинаковы. Опция оси = 1 применяет любую заданную функцию к строкам.