我有两个 DataFrame,需要按列比较这两个 DataFrame 并将结果附加到它旁边。
DF1:
索赔编号 | 索赔_状态 |
---|---|
1001 | 已关闭 |
1002 | 进行中 |
DF2:
索赔编号 | 索赔_状态 |
---|---|
1001 | 已关闭 |
1002 | 打开 |
预期输出:
DF3:
索赔号_DF1 | 索赔号_DF2 | 索赔编号比较 | 索赔状态_DF1 | 索赔状态_DF2 | 索赔状态比较 |
---|---|---|---|---|---|
1001 | 1001 | 正确 | 已关闭 | 已关闭 | 正确 |
1002 | 1002 | 正确 | 进行中 | 打开 | 错误 |
下面的代码可以工作,但它抛出性能警告“PerformanceWarning:DataFrame高度碎片化。这通常是多次调用`frame.insert`的结果,性能很差。考虑使用pd一次连接所有列。 concat(axis=1) 相反,要获得碎片整理的框架,请使用 `newframe = frame.copy()`"
代码:
i = 0
df_mismatch = pd.DataFrame()
while i < len(DF1.columns):
df_mismatch[f'{col_list[i]}_dev'] = DF1[Df1.columns[i]]
df_mismatch[f'{col_list[i]}_test'] = Df2[Df2.columns[i]]
df_mismatch[f'comparison_of_{col_list[i]}'] = np.where(
(Df1[Df1.columns[i]] == Df2[Df2.columns[i]]), True, False)
i = i+1
您可以
join
DataFrame 及其比较:
out = (df1.join(df2, lsuffix='_df1', rsuffix='_df2')
.join(df1.eq(df2).add_prefix('Comparison_of'))
)
输出:
Claim_number_df1 Claim_Status_df1 Claim_number_df2 Claim_Status_df2 Comparison_ofClaim_number Comparison_ofClaim_Status
0 1001 Closed 1001 Closed True True
1 1002 In Progress 1002 Open True False