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? Спасибо заранее.
Ответы
Ответ 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 применяет любую заданную функцию к строкам.