通过迭代列索引-pandas重命名具有相同名称的df列

时间:2019-02-15 21:23:06

标签: python-3.x pandas multiple-columns rename

我有一个react-dates数据框,

pandas

现在,我想使用数据框的列索引重命名 Name Not_Included Quantity Not_Included 0 Auto DNS 10 DNS 1 NaN DNS 12 DNS 2 Rtal DNS 18 DNS 3 NaN DNS 14 DNS 4 Indl DNS 16 DNS 5 NaN DNS 18 DNS 。所以,我得到这样的输出,

Not_Included

我尝试了以下方法,

       Name     Not_Included_1  Quantity Not_Included_3  
    0  Auto     DNS             10       DNS
    1  NaN      DNS             12       DNS
    2  Rtal     DNS             18       DNS
    3  NaN      DNS             14       DNS
    4  Indl     DNS             16       DNS
    5  NaN      DNS             18       DNS

我得到以下结果,

for c,v in enumerate(s_df):
    if v == 'Not_Included':
        vi = 'Not_Included' + str(c)
        s_df.rename(columns=lambda n: n.replace(v, vi), inplace=True)

posts重命名整个数据框的列,但这不是我想要的,因为我正在自动执行一些任务。如何使用列索引获得所需的输出?

还可以在重命名熊猫列时使用列表推导方法吗?

任何想法都很棒。

2 个答案:

答案 0 :(得分:2)

可以使用np.where设置列,检查重复的位置。

import numpy as np

df.columns = np.where(df.columns.duplicated(),  
                      [f'{df.columns[i]}_{i}' for i in range(len(df.columns))],
                      df.columns)

索引还具有where方法:

df.columns = df.columns.where(~df.columns.duplicated(),
                              [f'{df.columns[i]}_{i}' for i in range(len(df.columns))])

输出:

   Name Not_Included  Quantity Not_Included_3
0  Auto          DNS        10            DNS
1   NaN          DNS        12            DNS
2  Rtal          DNS        18            DNS

答案 1 :(得分:0)

这也可以工作

df.columns = ['{}_{}'.format(coluna, index) if 'Not_Included' in coluna else coluna for index, coluna in enumerate(df.columns)]