首页 > 解决方案 > 合并每个数据框中值略有不同的列上的数据框

问题描述

我正在尝试根据包含团队名称的列合并到数据框。

虽然球队的名字正确地写在了一个数据框中(“新英格兰爱国者队”、“纽约巨人队”......),但在第二个数据框中,名字是乱七八糟的,我只知道最后一个词队名仍然是最后一位('zapjizaPatriots'、'qdsjbGiants'..)。
我一直在想办法以某种方式pd.merge同时使用正则表达式,但没有任何效果。

df1 : {'team': {1: 'New England Patriots', 2: 'Miami Dolphins', 3: 'Buffalo Bills', 4: 'New York Jets', 6: 'Baltimore Ravens'}, 'W': {1: 11, 2: 7, 3: 6, 4: 4, 6: 10}, 'L': {1: 5, 2: 9, 3: 10, 4: 12, 6: 6}, 'Ratio': {1: 2.2, 2: 0.7777777777777778, 3: 0.6, 4: 0.3333333333333333, 6: 1.6666666666666667}} 

df2 : {'Metropolitan area': {0: 'New York City', 1: 'Los Angeles', 2: 'San Francisco Bay Area', 3: 'Chicago', 4: 'Dallas–Fort Worth'}, 'NFL': {0: 'GiantsJets', 1: 'RamsChargers', 2: '49ersRaiders', 3: 'Bears', 4: 'Cowboys'}}

标签: pandasdataframemerge

解决方案


我以您的df1,df2为例。首先,我们需要创建一个列,它是团队名称中的最后一个单词。对于 df1,它很容易在空格上拆分。对于df2我们拆分大写字母,将拆分的字母保留在列表中,然后组合最后两个元素:

df1['token'] = df1['team'].str.split().apply(lambda l:l[-1])
df2['token'] = df2['NFL'].str.split('([A-Z])').apply(lambda l:l[-2]+l[-1])

例如,我们得到 df2:

    Metropolitan area       NFL           token
--  ----------------------  ------------  --------
 0  New York City           GiantsJets    Jets
 1  Los Angeles             RamsChargers  Chargers
 2  San Francisco Bay Area  49ersRaiders  Raiders
 3  Chicago                 Bears         Bears
 4  Dallas–Fort Worth       Cowboys       Cowboys

现在我们可以合并token

df1.merge(df2,on='token',how='left')

结果不是很有趣,因为只有一场比赛,但希望能在你的完整 dfs 上起作用:

    team                    W    L     Ratio  token     Metropolitan area    NFL
--  --------------------  ---  ---  --------  --------  -------------------  ----------
 0  New England Patriots   11    5  2.2       Patriots  nan                  nan
 1  Miami Dolphins          7    9  0.777778  Dolphins  nan                  nan
 2  Buffalo Bills           6   10  0.6       Bills     nan                  nan
 3  New York Jets           4   12  0.333333  Jets      New York City        GiantsJets
 4  Baltimore Ravens       10    6  1.66667   Ravens    nan                  nan

推荐阅读