问题:现在有两个DataFrame,第一个我们命名为df1,第二个我们命名为df2。两个DataFrame中各有一列数据,我需要横向判断这两列的数据是否相同(即:判断df1的第1行和df2的第1行是否相同,df1第2行和df2第2行是否相同,依次类推),网上查看了一些解决办法,有的用循环遍历等都感觉不太正确,因为数据量太大也没办法验证.

import pandas as pd
import numpy as np

1、当数据长度相同时

df1 = pd.DataFrame({'col1':['a','b']})
df2 = pd.DataFrame({'col2':['a','c']})
df = pd.concat([df1, df2], axis=1)
df['result'] = np.where(df['col1']==df['col2'],'same','different')
df

在这里插入图片描述
2、当数据长度不同时

df1 = pd.DataFrame({'col1':['a','b']})
df2 = pd.DataFrame({'col2':['a','c','b']})
df = pd.concat([df1, df2], axis=1)
df['result'] = np.where(df['col1']==df['col2'],'same','different')
df

在这里插入图片描述
3、当都存在nan值的情况

df1 = pd.DataFrame({'col1':['a','b',np.nan]})
df2 = pd.DataFrame({'col2':['a','c',np.nan]})
df = pd.concat([df1, df2], axis=1)
df['result'] = np.where(df['col1']==df['col2'],'same','different')
df

在这里插入图片描述

二:补充问题,现在有两列数据,数据大体上是相同的,但是存在不同的数据,数据的顺序是乱的,目前需要把不同的数据取出来。

a = pd.DataFrame({'one':[1,2,3,4,5],'two':['q','w','e','r','t'],'three':['aa','ss','dd','ff','gg']})
b = pd.DataFrame({'onee':[1,2,3,4,5,6,7,8],'second':['qq','ww','ee','rr','tt','yy','uu','ii']})
#这里要把需要对比的列转为list,直接用DataFrame的Series的话,会把最后一个数也取出来。
c = a['one'].to_list()
d = b['onee'].to_list()
# 这里要用长的表做循环,用短的表做判断。
for i in d:
    if i in c:
        continue
    else:
        e.append(i)
e = pd.DataFrame(e,columns = ['onee_diff'])
f = pd.concat([e,b],axis=1)
g = f[f['onee_diff'].isnull()==False]
g

在这里插入图片描述
完整代码如下:

a = pd.DataFrame({'one':[1,2,3,4,5],'two':['q','w','e','r','t'],'three':['aa','ss','dd','ff','gg']})
b = pd.DataFrame({'onee':[1,2,3,4,5,6,7,8],'second':['qq','ww','ee','rr','tt','yy','uu','ii']})
#这里要把需要对比的列转为list,直接用DataFrame的Series的话,会把最后一个数也取出来。
c = a['one'].to_list()
d = b['onee'].to_list()
e = []
# 这里要用长的表做循环,用短的表做判断。
for i in d:
    if i in c:
        continue
    else:
        e.append(i)
e = pd.DataFrame(e,columns = ['onee_diff'])
f = pd.concat([e,b],axis=1)
g = f[f['onee_diff'].isnull()==False]
g

以上就是我的方法,如果大家有更好的方法,或者更加多功能对比的方法和想法,欢迎交流。

Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐