Переименуйте столбец df с тем же именем, перебирая столбцы indexes-pandas - PullRequest
0 голосов
/ 16 февраля 2019

У меня есть 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)

Я получаю следующий результат,

    Name    Not_Included31  Quantity  Not_Included31
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

Есть posts , чтобы переименовать столбцы всего фрейма данных, но это не то, что я ищу, так как я автоматизирую некоторые задачи.Как я могу получить желаемый результат, используя индекс столбцов?

Кроме того, я могу сделать это в методе понимания списка в переименовании столбцов панд?

Любые идеи будут великолепны.

Ответы [ 2 ]

0 голосов
/ 16 февраля 2019

Это тоже работает

df.columns = ['{}_{}'.format(coluna, index) if 'Not_Included' in coluna else coluna for index, coluna in enumerate(df.columns)]
0 голосов
/ 16 февраля 2019

Можно использовать 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
...