Как сравнить две ячейки со строками в пандах?

У меня есть фреймворк pandas следующим образом:

FIRST GOAL        WINNER

Algeria           brazil
Argentina      Argentina
Japan            Germany
brazil             brazil
france            France

Я хочу проверить, является ли первый бомбардир победителем игры. кто-нибудь может помочь?

Значение пытается быть установлено на копии фрагмента из DataFrame. Попробуйте вместо этого использовать .loc [row_indexer, col_indexer] = value См. Предостережения в документации: pandas.pydata.org/pandas-docs/stable/… "" "Точка входа для запуска ядра IPython. Я получил эту ошибку. Не могли бы вы помочь? Спасибо

Ravi Teja 07.06.2018 07:29

Pss: подумайте о том, чтобы принять ответ, если это помогло.

harvpan 12.06.2018 21:45
Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
3
2
5 515
2

Ответы 2

Тебе нужно:

df['is_winnder'] = df['FIRST GOAL'].str.lower() == df['WINNER'].str.lower()

Выход:

    FIRST GOAL  WINNER   is_winnder
0    Algeria     brazil       False
1  Argentina  Argentina        True
2      Japan    Germany       False
3     brazil     brazil        True
4     france     France        True

IIUC:
Вам нужно сравнить france с France, что требует нормализации строки. Мы можем сделать все буквы UPPER, lower или Title. Я пошел с lower.

nunique

Стек, затем используйте str.lower для нормализации заглавных букв. В этом ответе я сложил фрейм данных, чтобы только один раз вызвать str.lower для сложенного объекта Series. Затем я определил количество уникальных значений для первого уровня индекса, которые были нашими старыми строками. Если количество уникальных значений равно единице, то столбцы должны быть равны.

df.stack().str.lower().groupby(level=0).nunique().eq(1)

0    False
1     True
2    False
3     True
4     True
dtype: bool

Или же

df.assign(is_winner=df.stack().str.lower().groupby(level=0).nunique().eq(1))

  FIRST GOAL     WINNER  is_winner
0    Algeria     brazil      False
1  Argentina  Argentina       True
2      Japan    Germany      False
3     brazil     brazil       True
4     france     France       True

Series.str.lower

Это практически идентично ответу Харва Ипана, за исключением того, что я добавил str.lower().

df.assign(is_winner=df['FIRST GOAL'].str.lower() == df['WINNER'].str.lower())

applymap

Это лаконично. Один вызов с использованием applymap, который использует str.lower. Потом у меня возникла хитрость с распаковкой массива values в оператор eq.

from operator import eq

df.assign(winner=eq(*df.applymap(str.lower).values.T))

очень умное использование applymap bravo

Umar.H 23.06.2020 23:48

Другие вопросы по теме