通过在数据框架的所有单元格上应用功能来创建新的数据框



我有一个数据框,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的数据框架中...

您可以使用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

最新更新