Пожалуйста, перейдите по этой ссылке, чтобы увидеть данные >панды объединяют два кадра данных и сортируют по сравниваемому столбцу в соседнем столбце
Как я могу сравнить соседний столбец здесь на основе первичного ключа, который здесь Id1 и ID2, например: Lang_1 с Lang_2 , Mat_1 с Mat_2 и т. д., и если какое-либо несоответствие соседнего столбца b/w найдено для этой конкретной строки, то статус должен быть неудачным и если все соседние столбцы будут совпадать, то передайте, как я могу это сделать. Кто-нибудь может мне помочь, пожалуйста.
import pandas as pd
exam_1 = {
'ID1': ['1', '2', '3', '3', '5', '5'],
'ID2': ['1', '1', '4', '5', '1', '2'],
'Mat': [85, 75, 50, 93, 88, 90],
'Science': [96, 97, 99, 87, 90, 88],
'Reading': [80, 60, 72, 86, 84, 77],
'Wiritng': [78, 82, 88, 78, 86, 82],
'Lang': [77, 79, 77, 72, 90, 92],
}
exam_2 = {
'ID1': ['1', '2', '3', '3', '5', '5'],
'ID2': ['1', '1', '4', '5', '1', '2'],
'Mat': [80, 80, 90, 90, 85, 80],
'Science': [50, 60, 85, 90, 66, 82],
'Reading': [60, 75, 55, 90, 85, 60],
'Wiritng': [56, 66, 90, 82, 60, 80],
'Lang': [80, 78, 76, 90, 77, 66],
}
df_1 = pd.DataFrame(exam_1)
df_2 = pd.DataFrame(exam_2)
cmp = pd.merge(df_1, df_2, how="outer", on=['ID1','Id2'], suffixes=("_1", "_2"))
.set_index('ID1','ID2')
.sort_index(axis=1)
.reset_index()
cmp['Status'] = cmp.iloc[:, 2:].apply(lambda x: 'Pass' if x[0]==x[1] else 'Fail', axis =1)
2 ответа
IIUC, вы можете использовать:
cmp = (
pd.merge(df_1, df_2, how="outer", on=["ID1", "ID2"], suffixes=("_1", "_2"))
.set_index(["ID1", "ID2"]).sort_index(axis=1)
)
cmp["Status"] = (
np.where(
(cmp.filter(like="_1").to_numpy() == cmp.filter(like="_2").to_numpy())
.all(axis=1), "Pass", "Fail")
)
#or, use your approach
#cmp["Status"] = cmp.apply(lambda x: "Pass" if x[0]==x[1] else "Fail", axis=1)
cmp = cmp.reset_index()
Выход :
print(cmp)
ID1 ID2 Lang_1 Lang_2 ... Science_2 Wiritng_1 Wiritng_2 Status
0 1 1 77 80 ... 50 78 56 Fail
1 2 1 79 78 ... 60 82 66 Fail
2 3 4 77 76 ... 85 88 90 Fail
3 3 5 72 90 ... 90 78 82 Fail
4 5 1 90 77 ... 66 86 60 Fail
5 5 2 92 66 ... 82 82 80 Fail
Измененный код:
import pandas as pd
exam_1 = {
'ID1': [1, 2, 3, 4, 5, 6],
'ID2': [1, 2, 3, 4, 5, 6],
'Mat': [85, 75, 50, 93, 88, 90],
'Science': [96, 97, 99, 87, 90, 88],
'Reading': [80, 60, 72, 86, 84, 77],
'Writing': [78, 82, 88, 78, 86, 82],
'Lang': [77, 79, 77, 72, 90, 92],
}
exam_2 = {
'ID1': [1, 2, 3, 4, 5, 6],
'ID2': [1, 2, 3, 4, 5, 6],
'Mat': [80, 80, 90, 90, 85, 80],
'Science': [50, 60, 85, 90, 66, 82],
'Reading': [60, 75, 55, 90, 85, 60],
'Writing': [56, 66, 90, 82, 60, 80],
'Lang': [80, 78, 76, 90, 77, 66],
}
df_1 = pd.DataFrame(exam_1)
df_2 = pd.DataFrame(exam_2)
cmp = pd.merge(df_1, df_2, how="outer", on=['ID1', 'ID2'], suffixes=("_1", "_2")) \
.set_index(['ID1', 'ID2']) \
.sort_index(axis=1) \
.reset_index()
cmp['Status'] = cmp.iloc[:, 3:].apply(lambda x: 'Pass' if x[0] == x[1] else 'Fail', axis=1)
Вот что изменилось:
- В словари данных экзамена добавлены
'ID1'
и'ID2'
, чтобы они соответствовали именам столбцов в операции слияния. - Исправлена опечатка в названии столбца
'Writing'
. - Добавлены
'ID1'
и'ID2'
в функциюset_index
для установки индекса DataFrame. - Скорректировано индексирование
iloc
в функцииapply
, чтобы оно начиналось с третьего столбца (iloc[:, 3:]
), чтобы исключить несопоставимые столбцы. - Изменена функция
lambda
, чтобы она возвращала'Pass'
, если соседние значения равны (x[0] == x[1]
), и'Fail'
в противном случае.
После этих изменений cmp
DataFrame будет содержать столбцы ID1
, ID2
, а также исходные столбцы из df_1
и df_2
. Столбец Status
будет указывать, совпадают ли соседние значения в каждой строке или нет.
Новые вопросы
python
Python — это мультипарадигмальный многоцелевой язык программирования с динамической типизацией. Он предназначен для быстрого изучения, понимания и использования, а также обеспечивает чистый и унифицированный синтаксис. Обратите внимание, что Python 2 официально не поддерживается с 01.01.2020. Если у вас есть вопросы о версии Python, добавьте тег [python-2.7] или [python-3.x]. При использовании варианта Python (например, Jython, PyPy) или библиотеки (например, Pandas, NumPy) укажите это в тегах.