假设我有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,但它适用于单个标签,我需要检查行匹配...
任何见解都会受到赞赏, 谢谢,
答案 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