Я пытаюсь объединить 5 одинаковых таблиц, в каждой из которых есть одинаковый набор имен столбцов, но за 5 разных лет. Конечной целью является таблица с 21 столбцом (4 столбца x 5 таблиц, +1 для столбца имени) и тем не менее множеством строк, соответствующих внутреннему слиянию.
Для этого аналогичные имена столбцов обычно переименовываются с постфиксами вроде '_y', '_x' и др. c. чтобы дифференцировать их в новой объединенной таблице.
Но в моем случае имена из столбцов 3-й и 4-й таблиц получают те же постфиксы, что и 1-й и 2-й таблиц (у 5-й таблицы, похоже, нет постфиксов, ie исходные имена столбцов). Это привело к появлению некоторых точных имен столбцов в объединенной таблице, что усложняет pandas операций в нисходящем направлении. Это почему? Мне интересно, почему функция .merge ведет себя так. Я знаю, что могу сохранить желаемый формат путем перемаркировки исходных dfs перед объединением, но мне любопытно, почему функция отображает вышеуказанное поведение *.
Вот реплицируемые данные: https://pastebin.com/WEjqmKyz
И операции, которые я использую для объединения данных:
import pandas as pd
import functools
df_list = [df1, df1, df3, df4, df5]
end_df = reduce(lambda left,right: pd.merge(left,right,on='name'), df_list)
Это приводит к правильному df, за исключением проблемы с именами **:
Когда я распечатываю имена получаемых столбцов dfs, я получаю следующее:
['name',
'attacking_crossing_x',
'skill_dribbling_x',
'defending_standing_tackle_x',
'valuation_x',
'attacking_crossing_y',
'skill_dribbling_y',
'defending_standing_tackle_y',
'valuation_y',
'attacking_crossing_x',
'skill_dribbling_x',
'defending_standing_tackle_x',
'valuation_x',
'attacking_crossing_y',
'skill_dribbling_y',
'defending_standing_tackle_y',
'valuation_y',
'attacking_crossing',
'skill_dribbling',
'defending_standing_tackle',
'valuation']
* edit 1 ** edit 2