我有 SQL 背景,刚接触 Python。一段时间以来,我一直在试图弄清楚如何解决这个特殊问题,但我什么也想不出。
这是我的数据框
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
这是我到目前为止尝试过的方法
df['like_flg'] = np.where(df['First_name'].str.startswith(tuple(list(df_2['name']))), tuple(list(df_2['name'])), df['First_name'])
导致此错误:
`ValueError: operands could not be broadcast together with shapes (6,) (3,) (6,)`
我也尝试过对齐两个数据框,但是,这不适用于我要实现的用例。
有没有办法有条件地对齐数据框以填充以元组开头的列?
我认为我面临的问题是我用作比较的元组或数据框与我要将元组附加到的数据框大小不同。请参阅上面的所需输出。
先谢谢大家!
请您参考如下方法:
如果您的起始字符串长度不同,您可以使用 .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
