pandas仅使用小写将数据帧连接到相似但不相同的字符串上

时间:2015-10-27 15:16:52

标签: python pandas

我需要在相似但不相同的列上连接数据框。幸运的是,列之间的小写字母是相同的。所以我试图从每列中隔离小写字母,创建要加入的新列。

df1 = pd.DataFrame({'alpha': ['1', '2', '3'],
               'beta': ['JRLeparoux', 'BJHernandez,Jr.','SXBridgmohan'],})

df2 = pd.DataFrame({'alpha': ['1', '2', '3'],
               'gamma': ['Leparoux R', 'Hernandez,B, Jr.','Bridgmohan S X'],
               'zeta': ['17', '23','116'],}) 

这就是我试过的

def joinnames(df):    
    filelist = []
    for c in df:
        if c.islower():
             filelist.append(c)
    return filelist

df1['joinhere'] = df1['beta'].apply(joinnames) 
df2['joinhere'] = df2['gamma'].apply(joinnames)
pd.merge(df1,df2, how ='left', left_on = 'joinhere', right_on = 'joinhere' )

这是我想要实现的输出。

final = pd.DataFrame({'alpha': ['1', '2', '3'],
               'gamma': ['Leparoux R', 'Hernandez,B, Jr.','Bridgmohan S X'],
               'beta': ['JRLeparoux', 'BJHernandez,Jr.','SXBridgmohan'],
               'zeta': ['17', '23','116'],})

1 个答案:

答案 0 :(得分:1)

您可以使用Series.str.extract查找小写字母:

import pandas as pd

df1 = pd.DataFrame({'alpha': ['1', '2', '3'],
               'beta': ['JRLeparoux', 'BJHernandez,Jr.','SXBridgmohan'],})

df2 = pd.DataFrame({'alpha': ['1', '2', '3'],
               'gamma': ['Leparoux R', 'Hernandez,B, Jr.','Bridgmohan S X'],
               'zeta': ['17', '23','116'],}) 


df1['lower'] = df1['beta'].str.extract(r'([a-z]+)')
df2['lower'] = df2['gamma'].str.extract(r'([a-z]+)')
final = pd.merge(df1, df2)
print(final)

产量

  alpha             beta      lower             gamma zeta
0     1       JRLeparoux    eparoux        Leparoux R   17
1     2  BJHernandez,Jr.   ernandez  Hernandez,B, Jr.   23
2     3     SXBridgmohan  ridgmohan    Bridgmohan S X  116

请注意,这假设从az收集所有ASCII字符,以生成要加入的值。 如果您的betagamma列包含非ASCII小写字符(例如带有重音符号的字符),则可能需要将这些字符添加到正则表达式字符类[a-z]中。