Как можно сравнить два DataFrame в библиотеке Pandas?

Здравствуйте! 

У меня есть два столбца, извлеченных из файлов, содержащие смешанные значения: как цифры, так и буквы, что создает некую "кашу". Как я могу сравнить эти столбцы и создать третий столбец с результатом в формате True/False, а затем сохранить полученные данные в отдельной таблице? 

Также в будущем я хотел бы добавить фильтр для массива со значениями False, чтобы исключить числовые данные. Это поможет мне постепенно отсеивать нежелательные данные. 

Буду признателен за помощь! 

<pre><code class="php">df_kw = pd.read_excel(r'C:\Users\Bot\Desktop\файлик.xlsx', header=1, skiprows=4)
df_kw = df_kw.iloc[:, 0]

df_orig = pd.read_excel (r'C:\Users\Bot\Desktop\ключевики.xlsx')</code></pre>
  • 13 ноября 2024 г. 9:53
Ответы на вопрос 2
Здравствуйте!

Для сравнения двух столбцов в DataFrame с использованием библиотеки Pandas вы можете воспользоваться простым сравнениями с помощью оператора `==`. Давайте разберем ваш вопрос по шагам.

1. **Сравнение двух столбцов**: Предположим, что у вас есть два столбца, которые вы хотите сравнить, и они находятся в отдельных DataFrame.

2. **Создание нового столбца**: Вы можете создать новый столбец, который будет содержать результат сравнения (True/False).

3. **Фильтрация строк**: Чтобы исключить числовые данные из результата, вы можете воспользоваться методом `apply` для фильтрации.

Вот пример кода, который иллюстрирует все эти шаги:

```python
import pandas as pd

# Загрузка данных
df_kw = pd.read_excel(r'C:\Users\Bot\Desktop\файлик.xlsx', header=1, skiprows=4)
df_orig = pd.read_excel(r'C:\Users\Bot\Desktop\ключевики.xlsx')

# Предположим, что нужные столбцы называются 'Column1' и 'Column2'
# Сравниваем два столбца
# Здесь я предполагаю, что вы хотите сравнить значения двух столбцов по индексу.
df_kw['Comparison'] = df_kw['Column1'] == df_orig['Column2']

# Сохранение результата в новый DataFrame
df_result = df_kw.copy()

# Фильтрация для значений False и исключение числовых значений
df_false = df_result[df_result['Comparison'] == False]
df_false_filtered = df_false[~df_false['Column1'].apply(lambda x: str(x).isdigit())]

# Сохранение итоговых данных в новый Excel файл
df_false_filtered.to_excel(r'C:\Users\Bot\Desktop\результаты.xlsx', index=False)

print("Сравнение завершено и результаты сохранены.")
```

### Объяснение:
- Загрузка данных из Excel происходит с помощью `pd.read_excel()`.
- В новом столбце `Comparison` записывается результат сравнения значений из `Column1` и `Column2`. Если они равны, записывается `True`, если нет — `False`.
- Затем создается новый DataFrame `df_false`, который содержит только те строки, где `Comparison` равно `False`.
- После этого фильтруем `df_false`, исключая строки с числовыми значениями (используя `apply` и `str.isdigit()`).
- Наконец, сохраняем отфильтрованные данные в новый файл Excel.

Убедитесь, что вы заменили `'Column1'` и `'Column2'` на реальные названия столбцов в ваших DataFrame. Надеюсь, это поможет вам в вашей задаче!
1. Если в колонке сборник (строки, числа, пропущенные значения). То это тип 'object'. Что означает python object что в свою очередь надо понимать буквально, массив состоит из python объектов. 

2. Операция сравнения двух объектов, не является однозначно трактованной операцией, в том числе и по этому в python существуют дандер методы которые позволяют переопределять операторы сравнения (вложить свой смысл что именно ты подразумеваешь по сравнением). Это я к тому что ты должен четко понимать что ты значит равны.

pandas объекты поддерживают сравнение в его собственной интерпретации и поведении. Если этого достаточно
то, все элементарно. Если сравнение используется для фильтра то такие колонки не хранят.
df = pd.DataFrame({
    'A':[1,'a',2],
    'B':[1,'a',3]
})

df.loc[df['A'] == df['B']]

Колонкам не обязательно быть из одного и того же фрейма, лишь бы размерность совпадала.
Если же нужно особое понимание сравнения. То пишется функция которая принимает два массива на вход и возвращает массив булевых значений, затем этот массив используется в качестве маски, для осуществления выборки.
Похожие вопросы