用索引替换列名

Replace column name by Index

我在 Dataframe 中有以下数据。

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

虽然列名重复,但理想情况下,它是前两列(旧数据)与最后两列(新数据)的比较。

我试图通过使用以下代码在索引中附加 _New 来重命名倒数第二列。不幸的是,第一列也附加了 _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    |
+--------+------+--------+------+

我的理解是它应该只将 _New 添加到倒数第二列。以下是预期结果。

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

有什么办法可以做到吗?

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

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}')