首页 > 解决方案 > 为两个数据框创建列转换表

问题描述

我有两个数据框,其中一个有大约 300 列,另一个有大约 30 列。

第二个数据框中的 30 列都来自第一个,但都有不同的列名。

如何对第一个表上的这 30 列进行分析,以显示它们最有可能代表哪些列?

有没有办法使用 Pandas 做到这一点?

示例数据:

sample_dict_1 = {
    'col_1': [1,2,3,4,5],
    'col_2': [6,7,8,9,10],
    'col_3': [11,12,13,14,15],
    'col_4': [16,17,18,19,20],
    'col_4': [21,22,23,24,25]
}

sample_dict_2 = {
    'col_a': [11,12,13,14,15],
    'col_b': [6,7,8,9,10],
    'col_c': [21,22,23,24,28]
}

df1 = pd.DataFrame(sample_dict_1)
df2 = pd.DataFrame(sample_dict_2)

在此处输入图像描述

在此处输入图像描述

从上面的数据可以看出 col_a 和 col_b 匹配 col_3 和 col_2。

col_c 部分匹配 col_4。

我想产生一个输出,给我表格的匹配百分比,例如:

col_a
col_3 100%
col_1 0%
...

col_c
col_4 80%
col_1 0%
...

标签: pythonpandasdataframe

解决方案


不过,您已经有了答案:

如果帧没有相同的索引(索引可以保存并在之后重置):

df1.reset_index(inplace=True)
df2.reset_index(inplace=True)

然后:

df = pd.DataFrame({c2: [f'{(df2[c2] == df1[c1]).sum() / df2.shape[0] * 100:.0f}%'
                        for c1 in df1.columns]
                   for c2 in df2.columns},
                  index=df1.columns)

结果(print(df)):

      col_a col_b col_c
col_1    0%    0%    0%
col_2    0%  100%    0%
col_3  100%    0%    0%
col_4    0%    0%    0%
col_5    0%    0%   80%

推荐阅读