代码之家  ›  专栏  ›  技术社区  ›  Sarath Subramanian

用索引替换列名

  •  0
  • Sarath Subramanian  · 技术社区  · 3 年前

    我在数据框中有以下数据。

    +----+------+----+------+
    | Id | Name | Id | Name |
    +----+------+----+------+
    |  1 | A    |  1 | C    |
    |  2 | B    |  2 | B    |
    +----+------+----+------+
    

    尽管列名是重复的,但理想情况下,它是前2列(旧数据)与后2列(新数据)的比较。

    我试图通过添加 _New 使用下面的代码使用索引将其添加到。不幸的是,第一列还附加了 .

    df.rename(columns={df.columns[2]: df.columns[2] + '_New'}, inplace=True)
    

    这是我使用上述代码得到的结果。

    +--------+------+--------+------+
    | Id_New | Name | Id_New | Name |
    +--------+------+--------+------+
    |      1 | A    |      1 | C    |
    |      2 | B    |      2 | B    |
    +--------+------+--------+------+
    

    我的理解是,它应该添加 仅排在倒数第二列。以下是预期结果。

    +----+------+--------+------+
    | Id | Name | Id_New | Name |
    +----+------+--------+------+
    |  1 | A    |      1 | C    |
    |  2 | B    |      2 | B    |
    +----+------+--------+------+
    

    有什么办法做到这一点吗?

    1 回复  |  直到 1 年前
        1
  •  1
  •   mozway    3 年前

    您可以使用一个带有字典的简单循环来跟踪增量。我将这里的逻辑概括为处理任意数量的重复:

    cols = {}
    
    new_cols = []
    for c in df.columns:
        if c in cols:
            new_cols.append(f'{c}_New{cols[c]}')
            cols[c] += 1
        else:
            new_cols.append(c)
            cols[c] = 1
    df.columns = new_cols
    

    输出

       Id Name  Id_New1 Name_New1
    0   1    A        1         C
    1   2    B        2         B
    

    如果你真的想 Id_New 然后 Id_New2 等更改:

            new_cols.append(f'{c}_New{cols[c]}')
    

            i = cols[c] if cols[c] != 1 else ''
            new_cols.append(f'{c}_New{i}')