热线电话:13121318867

登录
2019-03-05 阅读量: 647
数据帧的所有单元格上应用函数来创建新数据帧

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

7.1701
2
关注作者
收藏
评论(0)

发表评论

暂无数据
推荐帖子