在比较两个数据帧中的两行时,我需要一些帮助。首先,我需要找到一个公共值,在这种情况下,该值是来自称为MX的列的值(它将永远不会更改),一旦它们匹配,我就需要比较整行以验证值是否相同以及是否它们的确相同就可以了(打印确定),但是如果不是,甚至没有一个值,我就需要知道它应该是哪个值或不匹配在哪里。
#这是固定的数据,不易发生变化(与之比较)。
Data:
dataframe1:
MX DT MN SC CS LN
0 1 11 1 400 1025 802436
1 5 21 4 240 3201 4025731
2 11 25 19 1428 2000 2013654
3 15 36 17 1005 6028 4251367
4 23 55 21 222 4017 1468532
5 38 32 33 426 4892 8347561
dataframe2:
MX DT MN SC CS LN
0 11 25 19 1428 2000 2013654
在这种情况下,它们在MX:11行中都匹配。在两种情况下,整行都是相同的,但是与以下情况相比,它们将是不一样的:
dataframe3:
MX DT MN SC CS LN
0 11 22 0 1427 2000 2013654
总而言之,如果任何行中的值都与dataframe1不同,那么我需要知道不匹配在哪里,哪个应该是期望值(dataframe1)。 最好在大熊猫中尝试或将其作为键值传递给字典并加以咀嚼?
答案 0 :(得分:0)
这是一种方法(我对数据进行了一些调整,以便可以显示差异):
设置:
df1 = pd.DataFrame({'MX': {0: 1, 1: 5, 2: 11, 3: 15, 4: 23, 5: 38},
'DT': {0: 11, 1: 21, 2: 25, 3: 36, 4: 55, 5: 32},
'MN': {0: 1, 1: 4, 2: 19, 3: 17, 4: 21, 5: 33},
'SC': {0: 400, 1: 240, 2: 1428, 3: 1005, 4: 222, 5: 426},
'CS': {0: 1025, 1: 3201, 2: 2000, 3: 6028, 4: 4017, 5: 4892},
'LN': {0: 802436, 1: 4025731, 2: 2013654, 3: 4251367, 4: 1468532, 5: 8347561}})
df2 = pd.DataFrame({'MX': {0: 11}, 'DT': {0: 26}, 'MN': {0: 19},
'SC': {0: 1428}, 'CS': {0: 2001}, 'LN': {0: 2013654}})
使用isin
过滤df1,然后根据布尔值的行对df1
进行切片:
df1 = df1.loc[df1["MX"].isin(df2["MX"])]
print (df1.loc[:, (~df1.eq(df2.to_numpy()).iloc[0]).tolist()])
DT CS
2 25 2000