过滤器系列/另一个数据框的数据框

问题描述 投票:1回答:2

假设我有一个Series(或DataFrame)s1,例如美国所有大学的列表:

                     University
0            Searcy Harding University
1          Angwin Pacific Union College
2    Fairbanks University of Alaska Fairbanks
3        Ann Arbor University of Michigan

和另一个系列(od DataFrame)s2,例如美国所有城市的列表:

      City
0    Searcy
1    Angwin 
2   New York 
3   Ann Arbor 

和我想要的输出(主要是s1s2的交集:]

     Uni City
0     Searcy
1     Angwin 
2    Fairbanks 
3    Ann Arbor 

事情是:我想创建一个由cities组成的系列,但只有这些,它们具有大学/学院。我的第一个想法是从s1中删除“大学”或“学院”部分,但事实证明,这与Angwin Pacific Union College一样还不够。然后,我想到只留下第一个单词,但不包括Ann Arbor。最终,我得到了所有城市的序列s2,现在我正尝试将其用作过滤器(类似于.contains().isin()的过滤器),因此,如果字符串s1(通用名称)包含s2(城市名称)的元素的any,然后仅返回城市名称。

我的问题是:如何以一种整洁的方式来做?

python pandas dataframe series
2个回答
0
投票

我将尝试对至少一个大学名称中包含的城市进行列表理解:

pd.Series([i for i in s2 if s1.str.contains(i).any()], name='Uni City')

使用示例数据,它给出:

0       Searcy
1       Angwin
2    Ann Arbor
Name: Uni City, dtype: object

0
投票

使用的数据

df=pd.DataFrame({'University':['Searcy Harding University','Angwin Pacific Union College','Fairbanks University of Alaska Fairbanks','Ann Arbor University of Michigan']})
df

df2=df=pd.DataFrame({'City':['Searcy','Angwin','Fairbanks','Ann Arbor']})
df2

df2.City转换为设置

s=set(df2.City.unique().tolist())

计算df['Uni City']

df['Uni City']=df['University'].apply(lambda x: next((i for i in s if i in x)), np.nan)

结果

enter image description here

© www.soinside.com 2019 - 2024. All rights reserved.