Python 如何在pandas中按特定列合并两个数据集

Python 如何在pandas中按特定列合并两个数据集,python,pandas,Python,Pandas,我正在使用Kaggle数据集“欧洲足球数据库”,并希望将其与另一个FIFA18数据集相结合 我的问题是这两个数据集中的名称列使用不同的格式 例如,一个数据集中的“莱昂内尔·梅西”,另一个数据集中的是“L.梅西” 我想将数据集中所有行的“L.Mesi”转换为小写版本的“lionel Mesi” 最聪明的方法是什么?一个简单的方法是将两个数据帧中的名称转换为通用格式,以便它们可以匹配。*让我们假设在df1中,名称是L.Mesi格式,在df2中,名称是lionel Mesi格式。通用格式是什么样的?您

我正在使用Kaggle数据集“欧洲足球数据库”,并希望将其与另一个FIFA18数据集相结合

我的问题是这两个数据集中的名称列使用不同的格式

例如,一个数据集中的“莱昂内尔·梅西”,另一个数据集中的是“L.梅西”

我想将数据集中所有行的“L.Mesi”转换为小写版本的“lionel Mesi”


最聪明的方法是什么?

一个简单的方法是将两个数据帧中的名称转换为通用格式,以便它们可以匹配。*让我们假设在
df1
中,名称是
L.Mesi
格式,在
df2
中,名称是
lionel Mesi
格式。通用格式是什么样的?您有几个选项,但有一个选项是全小写的,只有第一个首字母后跟句点:
l。梅西

df1 = pd.DataFrame({'names': ['L. Messi'], 'x': [1]})
df2 = pd.DataFrame({'names': ['lionel messi'], 'y': [2]})

df1.names = df1.names.str.lower()
df2.names = df2.names.apply(lambda n: n[0] + '.' + n[n.find(' '):])

df = df1.merge(df2, left_on='names', right_on='names')

*注意:这种方法完全依赖于名称以这种方式“匹配”。有很多情况可能导致这种简单方法失败。如果一个团队有两名成员,
Abby Wambach
Aaron Wambach
,他们看起来都像
a。万巴赫
。如果一个数据帧试图通过在其名称中使用其他首字母来区分它们,如
m.a.wambach
a.k.wambach
,则原始匹配将失败。如何处理这一点取决于数据的大小——也许你可以尝试以这种方式匹配大多数玩家,看看谁会被丢弃,并为他们编写自定义代码

其可能的副本不容易基于部分匹配进行合并