Создание нового фрейма данных из применения функции ко всей ячейке фрейма данных - PullRequest
0 голосов
/ 05 марта 2019

У меня есть фрейм данных, df, например:

data = {'A': ['Jason (121439)', 'Molly (194439)', 'Tina (114439)', 'Jake (127859)', 'Amy (122579)'], 
        'B': ['Bob (127439)', 'Mark (136489)', 'Tyler (121443)', 'John (126259)', 'Anna(174439)'], 
        'C': ['Jay (121596)', 'Ben (12589)', 'Toom (123586)', 'Josh (174859)', 'Al(121659)'],
        'D': ['Paul (123839)', 'Aaron (124159)', 'Steve (161899)', 'Vince (179839)', 'Ron (128379)']}

df = pd.DataFrame(data)

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

data2 = {'Name': ['Jason ', 'Molly ', 'Tina ', 'Jake ', 'Amy '], 
        'ID#': ['121439', '194439', '114439', '127859', '122579']} 
result = pd.DataFrame(data2)

Я пробую разные вещи, но все это не сработало:

1)

List_name=pd.DataFrame()
List_id=pd.DataFrame()
List_both=pd.DataFrame(columns=["Name","ID"])

for i in df.columns:
    left=df[i].str.split("(",1).str[0]
    right=df[i].str.split("(",1).str[1]
    List_name=List_name.append(left)
    List_id=List_id.append(right)

List_both=pd.concat([List_name,List_id], axis=1)
List_both

2) применение функции ко всей ячейке

Names = lambda x: x.str.split("(",1).str[0]
IDS = Names = lambda x: x.str.split("(",1).str[1]

Но мне было интересно, как это сделать, чтобы сохранить его во фрейме данных, который будет выглядеть как result ...

1 Ответ

0 голосов
/ 05 марта 2019

Вы можете использовать stack, а затем str.extract.

(df.stack()
   .str.strip()
   .str.extract(r'(?P<Name>.*?)\s*\((?P<ID>.*?)\)$')
   .reset_index(drop=True))

     Name      ID
0   Jason  121439
1     Bob  127439
2     Jay  121596
3    Paul  123839
4   Molly  194439
5    Mark  136489
6     Ben   12589
7   Aaron  124159
8    Tina  114439
9   Tyler  121443
10   Toom  123586
11  Steve  161899
12   Jake  127859
13   John  126259
14   Josh  174859
15  Vince  179839
16    Amy  122579
17   Anna  174439
18     Al  121659
19    Ron  128379
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...