Есть ли способ в Pandas объединить два фрейма данных с использованием столбцов, которые изменяются, не затрагивая оригиналы? - PullRequest
0 голосов
/ 03 августа 2020

Я пытаюсь объединить два фрейма данных в столбцах, которые содержат имена, совпадающие без заглавных букв. Базовый объект имеет формат «заголовок», тогда как объект слияния находится в «верхнем» формате.

Я мог бы легко изменить объединяемый объект в формат «заголовок», а затем выполнить слияние, но возможно ли это эффективно сделать это временно без формального изменения исходного фрейма данных? Я также мог бы просто сделать копию и изменить это, но я стремлюсь к простейшему решению с наименьшим количеством дополнительных фреймов данных.

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'))
'''

Ответы [ 2 ]

1 голос
/ 03 августа 2020
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
0 голосов
/ 03 августа 2020

Вы можете попробовать это: -

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)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...