比较两个 DataFrame 并并排附加结果(收到性能警告)

问题描述 投票:0回答:1

我有两个 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
python pandas performance
1个回答
0
投票

您可以

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
© www.soinside.com 2019 - 2024. All rights reserved.