Python 如何在两个数据帧之间比较每列下每行的值?

Python 如何在两个数据帧之间比较每列下每行的值?,python,pandas,Python,Pandas,我有两个Dataframe,我想比较每列下每行的值 我本可以使用下面的代码,但它不是有效的,因为在实际的工作环境中,我在每个数据帧中有50多列和95k行 两个数据帧的行数和列名完全相同。更有效的方法是什么 这就是数据帧的外观- Df1 项目金额位置 项目1300东 项目2500西部 Df2 项目金额位置 项目1350东 项目2500西部 期望的结果 项目金额位置项目2金额位置2金额\u差异项目\u差异位置\u差异 项目1 300东项目1 350东假真 first = {'Item': ['Ite

我有两个Dataframe,我想比较每列下每行的值

我本可以使用下面的代码,但它不是有效的,因为在实际的工作环境中,我在每个数据帧中有50多列和95k行

两个数据帧的行数和列名完全相同。更有效的方法是什么

这就是数据帧的外观-

Df1

项目金额位置
项目1300东
项目2500西部

Df2

项目金额位置
项目1350东
项目2500西部

期望的结果

项目金额位置项目2金额位置2金额\u差异项目\u差异位置\u差异

项目1 300东项目1 350东假真

first = {'Item': ['Item1','Item2'],
               'amount': [300,500],'location':['East','West']
               }
df1 = pd.DataFrame(first,columns= ['Item', 'amount','location'])

second = {'Item': ['Item1','Item2'],
               'amount': [350,500],'location':['East','West']
               }
df2 = pd.DataFrame(second,columns= ['Item', 'amount','location'])

df1['Item2'] = df2['Item']
df1['amount2'] =df2['amount']
df1['location2'] =df2['location']

df1['Item_diff'] = np.where(df1['Item'] == df1['Item2'], 'True', 'False')
df1['amount_diff'] = np.where(df1['amount'] == df1['amount2'], 'True', 'False')
df1['location_diff'] = np.where(df1['location'] == df1['location2'], 'True', 'False')

df1['Item_diff'] 
df1['amount_diff']
df1['location_diff']
项目2500西部项目2500西部真实真实

first = {'Item': ['Item1','Item2'],
               'amount': [300,500],'location':['East','West']
               }
df1 = pd.DataFrame(first,columns= ['Item', 'amount','location'])

second = {'Item': ['Item1','Item2'],
               'amount': [350,500],'location':['East','West']
               }
df2 = pd.DataFrame(second,columns= ['Item', 'amount','location'])

df1['Item2'] = df2['Item']
df1['amount2'] =df2['amount']
df1['location2'] =df2['location']

df1['Item_diff'] = np.where(df1['Item'] == df1['Item2'], 'True', 'False')
df1['amount_diff'] = np.where(df1['amount'] == df1['amount2'], 'True', 'False')
df1['location_diff'] = np.where(df1['location'] == df1['location2'], 'True', 'False')

df1['Item_diff'] 
df1['amount_diff']
df1['location_diff']

df1.eq(df2)
join可以像
df1.join(df2,lsuffix='1',rsuffix='2')。join(df1.eq(df2)。添加后缀('u diff'))
非常感谢。这工作得非常好。但是我仍然有一个问题,如果field1和filed2都为null,field_diff将返回Fasle。你知道为什么吗?@user032020这是一个惯例,试试np.nan==np.nan,你会得到错误的比较方法?不要像那样使用
np.where()
,这是不规则的。你没看过熊猫的文件吗?