Изменение порядка столбца в соответствии с порядком в списке и последующее преобразование списка в новый столбец - PullRequest
0 голосов
/ 09 июля 2020

Мне нужно сопоставить список как новый столбец в фрейме данных на основе другого столбца с теми же значениями, но могут иметь разные случаи для разных букв:

        Input DF (df_temp):
        Name  Class
        ABC   1
        EFG   2
        HIJ   3
        ABC   4
        
        param_list:
        ['AbC', 'EfG', 'HiJ']

        Output DF (df_temp):
        Name  Class  DB_Name
        ABC   1      AbC
        EFG   2      EfG
        HIJ   3      HiJ
        ABC   4      AbC

Я написал небольшой фрагмент кода используя 2 цикла for, но есть ли лучший способ сделать то же самое:

        for param in param_list:
            for i in range(len(df_temp.Param_Name.str.lower().tolist())):
                if param.lower() == df_temp['Name'][i].lower():
                    df_temp['DB_Name'][i] = param

Ответы [ 2 ]

0 голосов
/ 09 июля 2020

Использование join:

s = pd.Series(L, name='DB_name', index=map(str.upper, L))
df_temp = df_temp.assign(k=df['Name'].str.upper()).join(s, on='k').drop('k', 1)

Результат:

  Name  Class DB_name
0  ABC      1     AbC
1  EFG      2     EfG
2  HIJ      3     HiJ
3  ABC      4     AbC
0 голосов
/ 09 июля 2020

Используйте Series.str.lower с Series.map по словарю, созданному в понимании dict, и lower, если какое-то значение не совпадает, получите отсутствующие значения, при необходимости замените их оригинальными Name значения складываются Series.fillna:

L = ['AbC', 'EfG', 'HiJ']
d = {x.lower():x for x in L}

df_temp['DB_Name'] = df_temp['Name'].str.lower().map(d)
#if possible some values not match
#df_temp['DB_Name'] = df_temp['Name'].str.lower().map(d).fillna(df_temp['Name'])
print (df_temp)
  Name  Class DB_Name
0  ABC      1     AbC
1  EFG      2     EfG
2  HIJ      3     HiJ
3  ABC      4     AbC
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...