2017-01-23 38 views
1

比方说,我有DF1:熊猫,比较2个dataframes在索引和列移动的位置

filerid usersidid client_op ClientHostID eventSum 
0  1  1  5030   6   2 
1  1  2  5030   7   1 
2  1  3  5030   8   1 

和DF2:

ClientHostID usersidid client_op filerid eventSum 
0  7   2  5030  1   1 
1  6   1  5030  1   2 
2  8   3  5030  1   1 

现在,我需要检查,如果2个DFS有一个相匹配行(例如,我认为示例中的dfs是匹配的)。

问题是,行和列交换位置,dataframe.equales()检查dfs是否为相同,包括行和列的相同方向。

我无法对行和列重新排序,但我保证列具有相同的标签。

我试图用dataframe.isin,但它工作在单个标签上,我需要检查的行匹配...

任何有识之士将不胜感激, 谢谢

回答

2

我觉得simpliest是使用merge哪里是不on,所以合并所有列上,与equals

print (pd.merge(df1, df2)) 
    filerid usersidid client_op ClientHostID eventSum 
0  1   1  5030    6   2 
1  1   2  5030    7   1 
2  1   3  5030    8   1 

print (pd.merge(df1, df2).equals(df1)) 
True 
1

试这样的:

for column in df1.columns: 

    try: 

     if df1[column] == df2[column]: 

      print 'match of column %s' %column 

    except: 

     pass 

希望它有助于

1

您可以重新编制后的比较数据框整体。 例如,如果你知道你的usersidid是在数据帧独特的,你可以这样做:

df1.index = df1.usersidid 
df2.index = df2.usersidid 
df1.shape[0] * df1.shape[1] == (df1 == df2).sum().sum() 

如果返回true,则dataframes是相同的。

(df1 == df2).sum().sum()给你的细胞数相等,df1.shape[0] * df1.shape[1]计算细胞总量。

当然,你也可以做它周围的其他方法:

(df1 != df2).sum().sum() 

应该返回0