Skip to main content
 首页 » 编程设计

python之有条件地对齐两个数据帧,以便导出作为 numpy 条件传入的列,其中

2025年05月04日1552php

我有 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