请参考此链接查看数据pandas合并两个dataframe并按相邻列中的比较列进行排序
如何根据主键(这里是ID 1和ID 2)比较相邻列,例如: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': [80, 75, 50, 93, 88, 90],
'Science': [96, 97, 99, 87, 90, 88],
}
exam_2 = {
'ID1': ['1', '2', '3', '3', '5'],
'ID2': ['1', '1', '4', '5', '1'],
'Mat': [80, np.nan , 50, 93, 88],
'Science': [50, 60, 85, 90, 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)
下面我将介绍两种情况
1.如果df 2中存在df 1的主键a)如果两个相邻单元格匹配,则应使用绿色突出显示b)如果两个相邻单元格不匹配,则应使用红色突出显示c)如果任何单元格为空白,则应使用黄色突出显示
1.如果df 1的主键不存在于df 2中,则除主键外,整行应以黄色突出显示。
2条答案
按热度按时间z9zf31ra1#
修改代码:
以下是变化:
1.将
'ID1'
和'ID2'
添加到检查数据字典中,以匹配合并操作中的列名。1.修复了列名
'Writing'
中的拼写错误。1.将
'ID1'
和'ID2'
添加到set_index
函数中,以设置DataFrame的索引。1.已将
apply
函数中的iloc
索引调整为从第三列(iloc[:, 3:]
)开始,以排除不可比较的列。1.修改了
lambda
函数,如果相邻值相等(x[0] == x[1]
),则返回'Pass'
,否则返回'Fail'
。在这些更改之后,
cmp
DataFrame将包含列ID1
、ID2
以及来自df_1
和df_2
的原始列。Status
列将指示每行中的相邻值是否匹配。ozxc1zmp2#
IIUC,您可以用途:
输出:
更新:
如果df1的主键存在于df2中
如果df1的主键不存在于df2中: