оба ответа - то, что мне нужно. Если бы я хотел создать рекурсив, это также сработало бы так, как задумано:

я есть разные фреймы данных, и мне нужно объединить их на основе столбца даты. Если бы у меня было только два кадра данных, я мог бы использоватьdf1.merge(df2, on='date'), чтобы сделать это с тремя фреймами данных, я используюdf1.merge(df2.merge(df3, on='date'), on='date')Однако это становится действительно сложным и нечитаемым, чтобы сделать это с несколькими фреймами данных.

Все кадры данных имеют один общий столбец -date, но они не имеют одинаковое количество строк и столбцов, и мне нужны только те строки, в которых каждая дата является общей для каждого кадра данных.

Итак, я пытаюсь написать рекурсивную функцию, которая возвращает фрейм данных со всеми данными, но это не сработало. Как тогда объединить несколько фреймов данных?

Я пробовал разные способы и получил ошибки, такие какout of range, keyerror 0/1/2/3 а такжеcan not merge DataFrame with instance of type <class 'NoneType'>.

Это сценарий, который я написал:

dfs = [df1, df2, df3] # list of dataframes

def mergefiles(dfs, countfiles, i=0):
    if i == (countfiles - 2): # it gets to the second to last and merges it with the last
        return

    dfm = dfs[i].merge(mergefiles(dfs[i+1], countfiles, i=i+1), on='date')
    return dfm

print(mergefiles(dfs, len(dfs)))

Пример: df_1:

May 19, 2017;1,200.00;0.1%
May 18, 2017;1,100.00;0.1%
May 17, 2017;1,000.00;0.1%
May 15, 2017;1,901.00;0.1%

df_2:

May 20, 2017;2,200.00;1000000;0.2%
May 18, 2017;2,100.00;1590000;0.2%
May 16, 2017;2,000.00;1230000;0.2%
May 15, 2017;2,902.00;1000000;0.2%

df_3:

May 21, 2017;3,200.00;2000000;0.3%
May 17, 2017;3,100.00;2590000;0.3%
May 16, 2017;3,000.00;2230000;0.3%
May 15, 2017;3,903.00;2000000;0.3%

Ожидаемый результат слияния:

May 15, 2017;  1,901.00;0.1%;  2,902.00;1000000;0.2%;   3,903.00;2000000;0.3%   

Ответы на вопрос(6)

Ваш ответ на вопрос