首页 > 解决方案 > 比较列不同的数据框

问题描述

我有两个要合并的 DataFrame,但我更愿意检查两个 dfs 中存在的一列在每一行中是否具有完全相同的值。

对于一般合并,我在评论中尝试了几种解决方案,您看到了形状

df = pd.concat([df_b, df_c], axis=1, join='inner')          # (245131, 40)
df = pd.concat([df_b, df_c], axis=1).reindex(df_b.index)    # (245131, 40)
df = pd.merge(df_b, df_c, on=['client_id'], how='inner')    # (420707, 39)
df = pd.concat([df_b, df_c], axis=1)                        # (245131, 40)

原来的 df_c(245131, 14)和 df_b 是(245131, 26) By 我假设列 client_id 具有确切的值,因为在三种方法中我的形状为 245131 行。

  1. 我想比较 new_df 中的 client_ids,用 .loc 尝试过,但没有成功。也尝试过df.rename(columns={ df.columns[20]: "client_id_1" }, inplace=True),但它重命名了两列

我试过了

df_test = df_c.client_id
df_test.append(df_b.client_id, ignore_index=True)

但我只收到一个索引和一个 client_id 列,但形状显示 245131 行。

  1. 如果我可以确定这些值完全相同,我应该将 client_id 放在一个 df 中,然后再进行 concat/merge 吗?这样我就得到了 (245131, 39) 的正确形状

是否有用于合并或比较 read_csv 的 mangle_dupe_cols 命令?

标签: pythonpandasnumpy

解决方案


克里斯,如果您想检查 2 个单独数据框的 2 列是否完全相同,您可以尝试以下操作:

tuple(df1['col'].values) == tuple(df2['col'].values)

这应该返回一个布尔值

如果要合并 2 个数据框,请确保您感兴趣的列的所有行都具有唯一值,因为重复会导致添加行

如果要沿轴连接数据框,请使用 concat


推荐阅读