pandas dataframe - совпадение строки и группы из двух столбцов - PullRequest
0 голосов
/ 12 июня 2018

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

Отсюда:

Id    Name1    Name2
0     Alpha 1  Bravo 3
1     Alpha 2  Alpha 2
2     Bravo 3  Alpha 1

До этого:

Id    Name1    Name2    NewCol1    NewCol2
0     Alpha 1  Bravo 3  1          2
1     Alpha 2  Zero  2  1          3
2     Bravo 3  Alpha 1  2          1

Есть ли простое решение без большого цикла итерации?

Ответы [ 2 ]

0 голосов
/ 12 июня 2018

Вам может понадобиться использовать цикл для перебора имен столбцов.Для строк используйте pandas.Series.str.replace

import pandas as pd
df = pd.DataFrame({'Name1' :['Alpha 1', 'Aplha 2', 'Bravo 3'], 'Name2' : ['Bravo 3', 'Alpha 2', 'Alpha 1']})
for name in df.columns.tolist():
    df["newCol" + name.replace("Name", "")] = df[name].str.split(expand=True)[1]
0 голосов
/ 12 июня 2018

Я думаю, нужно создать Series с MultiIndex на stack, удалить digit с, а для категорий использовать factorize, последний unstack и join к оригиналу:

s = df.set_index('Id').stack().str.replace('\d+', '')

df = df.join(pd.Series(pd.factorize(s)[0] + 1, index=s.index).unstack().add_prefix('New'))
print (df)
   Id    Name1    Name2  NewName1  NewName2
0   0  Alpha 1  Bravo 3         1         2
1   1  Alpha 2   Zero 2         1         3
2   2  Bravo 3  Alpha 1         2         1

Подробности :

print (s)
Id       
0   Name1    Alpha 
    Name2    Bravo 
1   Name1    Alpha 
    Name2     Zero 
2   Name1    Bravo 
    Name2    Alpha 
dtype: object

print (pd.factorize(s)[0] + 1)
[1 2 1 3 2 1]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...