我正在尝试在包含匹配名称减去大写字母的列上合并两个数据框。基础对象具有“标题”格式,而合并对象具有“上部”格式。
我可以轻松地将合并对象修改为“标题”格式,然后进行合并,但是有可能在不正式修改原始数据帧的情况下暂时有效地做到这一点吗?我也可以复制并修改它,但我的目标是使用最少的额外数据帧的最简单解决方案。
import pandas as pd
import numpy as np
df1 = pd.DataFrame({'name': ['John', 'Mary', 'Louis'],
'value': np.random.randint(0,100,3)})
df2 = pd.DataFrame({'name': ['MARY', 'JOHN', 'LOUIS'],
'value2:': np.random.randint(0,100,3)})
# What I don't want to have to do:
df2['name'] = df2['name'].str.title()
df3 = pd.merge(df1, df2, on = 'name')
# What I want to be able to do (doesn't work)
'''
df3 = pd.merge(df1, df2, left_on = 'name', right_on = title('name'))
'''
答案 0 :(得分:1)
df1 = pd.DataFrame({'name': ['John', 'Mary', 'Louis'],
df1 = pd.DataFrame({'name': ['John', 'Mary', 'Louis'],
'value': [1,2,3]})
df2 = pd.DataFrame({'name': ['MARY', 'JOHN', 'LOUIS'],
'value2': [10,20,30]})
df1.merge(df2, left_on='name', right_on=df2['name'].str.title()).drop(
["name_x", "name_y"], axis=1)
输出:
name value value2
0 John 1 20
1 Mary 2 10
2 Louis 3 30
答案 1 :(得分:0)
您可以尝试以下操作:-
title = lambda df, column: df[column].str.title()
pd.merge(df1, df2, left_on = 'name', right_on = title(df2, 'name')).drop(['name_x','name_y'], axis = 1)