Pandas,比较索引和列位移位置中的2个数据帧

时间:2017-01-23 15:42:01

标签: python pandas

假设我有df1:

    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,但它适用于单个标签,我需要检查行匹配...

任何见解都会受到赞赏, 谢谢,

3 个答案:

答案 0 :(得分:2)

我认为最简单的是使用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 :(得分:1)

试试这个:

for column in df1.columns:

    try:

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

             print 'match of column %s' %column

     except:

         pass

希望有所帮助

答案 2 :(得分:1)

您可以在重建索引后比较整个数据帧。 例如,如果您知道您的usersidid在数据框中是唯一的,则可以执行以下操作:

load(): Promise<any> {
    return this.http.get(this.BASEURL + 'api/client/hotel/load')
        .toPromise()
        .then(response => {
            return response.json();
        })
        .catch(err => err);
}

如果返回true,则数据帧相同。

df1.index = df1.usersidid df2.index = df2.usersidid df1.shape[0] * df1.shape[1] == (df1 == df2).sum().sum() 为您提供相等的单元格数量,(df1 == df2).sum().sum()计算单元格总数。

当然你也可以这样做:

df1.shape[0] * df1.shape[1]

应该返回0