两个如何比较来自两个不同数据框的熊猫的两行

理查德21

在比较两个数据帧中的两行时,我需要一些帮助。首先,我需要找到一个公共值,在这种情况下,该值是来自称为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)。最好在大熊猫中尝试或将其作为键传递给字典:值并轻敲它?

奕奕

这是一种方法(我对数据进行了一些调整,以便可以显示出差异):

设定:

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}})

使用df1过滤isin,然后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

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章