热线电话:13121318867

登录
2019-01-27 阅读量: 691
有条件地对齐两个数据帧,以便在numpy中导出作为条件传入

我一直试图弄清楚如何解决这个特殊问题一段时间,我无法想出任何东西。

这是我的数据框架

from pandas import DataFrame

import numpy as np

Names1 = {'First_name': ['Jon','Bill','Billing','Maria','Martha','Emma']}

df = DataFrame(Names1,columns=['First_name'])

print(df)

names2 = {'name': ['Jo', 'Bi', 'Ma']}

df_2 = DataFrame(names2,columns=['name'])

print(df_2)

结果如下:

First_name

0 Jon

1 Bill

2 Billing

3 Maria

4 Martha

5 Emma

name

0 Jo

1 Bi

2 Ma

这段代码帮助我在df中识别出First_name以df_2中的元组开头

df['like_flg'] = np.where(df['First_name'].str.startswith(tuple(list(df_2['name']))), 'true', df['First_name'])

结果如下:

First_name like_flg

0 Jon true

1 Bill true

2 Billing true

3 Maria true

4 Martha true

5 Emma Emma

我希望数据帧的最终输出将like_flg设置为有条件地比较First_name字段的元组的值。请参阅下面的最终所需输出:

First_name like_flg

0 Jon Jo

1 Bill Bi

2 Billing Bi

3 Maria Ma

4 Martha Ma

5 Emma Emma

解决办法:

可以使用 .str.extract

df['like_flag'] = df['First_name'].str.extract('^('+'|'.join(df_2.name)+')')

df['like_flag'] = df['like_flag'].fillna(df.First_name) # Fill non matches.

我修改df_2了

name

0 Jo

1 Bi

2 Mar

这导致:

First_name like_flag

0 Jon Jo

1 Bill Bi

2 Billing Bi

3 Maria Mar

4 Martha Mar

5 Emma Emma

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

发表评论

暂无数据
推荐帖子