Как можно итеративно заменить значения определенного столбца c в кадре данных? - PullRequest
1 голос
/ 24 января 2020

У меня есть фрейм данных, который выглядит следующим образом:

newDF = pd.DataFrame()
output_table = newDF
output_table['Keyword'] = 'abgeg','abgegang', 'abgegeb'
output_table['ID'] = '1', '2', '3'

И вложенный список, который выглядит так:

kal =[
     ['abgeglichen', 'abgeg'], 
     ['abgegangen', 'abgegang'], 
     ['abgegeben', 'abgegeb']
     ]

Как вы можете видеть элементы в индексе [1] в подсписках есть основы и соответствуют значения в столбце Ключевое слово в кадре данных.

Теперь я хочу заменить значения столбца Keyword в кадре данных на значения из подсписка с индексом [0].

Мой желаемый результат:

output_table['Keyword'] = 'abgeglichen','abgegangen', 'abgegeben'
output_table['ID'] = '1', '2', '3'

Я попробовал этот код:

def rep(kal, df):
    keys = []
    for line in kal:
        for index, Keyword in df.iteritems():
            if line[1] == Keyword:
                a = Keyword.replace(Keyword, line[0])
                keys.append(a)
    return keys

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

Может кто-нибудь помощь

Ответы [ 2 ]

3 голосов
/ 24 января 2020

Изменить порядок значений во вложенных списках, преобразовать в dict и затем передать в Series.replace:

output_table['Keyword'] = output_table['Keyword'].replace({a:b for b, a in kal})
print (output_table)
       Keyword ID
0  abgeglichen  1
1   abgegangen  2
2    abgegeben  3
3 голосов
/ 24 января 2020

Используйте series.replace после переключения ключей на значения и значений на ключи в списке ввода (после преобразования в dict)

output_table['Keyword']=output_table['Keyword'].replace({v:k for k,v in dict(kal).items()})

       Keyword ID
0  abgeglichen  1
1   abgegangen  2
2    abgegeben  3
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...