Описание требуемой задачи
Я использую следующий код для объединения df
и df1
(показаны примеры данных), и он хорошо работает для того, что мне нужно. Однако мне нужно l oop на большом количестве фреймов данных (например, df2
, но будет df3
, df4
et c.) И я не уверен, как изменить код. У меня есть DataFrames с тем же индексом, те же столбцы, однако несколько столбцов являются индивидуальными для каждого DataFrame. Я использую следующий код, и он хорошо работает, но я могу sh изменить его, чтобы я мог с oop по df
и df1
, объединить их вместе, создав requireddata
, но затем повторить это, где requireddata
объединено с df2
. Тот же лог c будет продолжаться с requireddata
слиянием с df3
и так далее. Любая помощь будет потрясающей! :)
df
ID AA TA TL
Date
2001 AAPL 1.0 44 50
2002 AAPL 3.0 33 51
2003 AAPL 2.0 22 53
2004 AAPL 5.0 11 76
2005 AAPL 2.0 33 44
2006 AAPL 3.0 22 12
df1
ID AA TA ML
Date
2001 MSFT 3.5 44 12
2002 MSFT 6.7 33 15
2003 MSFT 2.3 22 19
2004 MSFT 5.5 11 20
2005 MSFT 2.2 33 43
2006 MSFT 3.2 22 23
df2
Пример
ID AA TA PP
Date
2001 TSLA 3.3 48 18
2002 TSLA 6.3 38 18
2003 TSLA 2.6 28 18
2004 TSLA 5.3 18 28
2005 TSLA 2.3 38 48
2006 TSLA 3.3 28 28
Код используется
dfdates['Date'] # this has dates required for index
df
df1
cols_to_use = df.columns.difference(df1.columns) #compare column difference df and df1
cols_to_use1 = df1.columns.difference(df.columns) #compare column difference df1 and df
dataframe = pd.DataFrame(columns = cols_to_use, index = df['Date']) #dataframe with columns in df1 but not in df
dataframe1 = pd.DataFrame(columns = cols_to_use1, index = df1['Date']) #dataframe with columns in df but not in df1
datatesting = pd.concat([dataframe, df], axis=1) #merge missing columns into df
datatesting1 = pd.concat([dataframe1, df1], axis=1) #merge missing columns into df1
diff = datatesting1.columns.difference(datatesting.columns) #check difference (is 0)
print (diff)
frames = [datatesting, datatesting1] #list of dataframes
requireddata = pd.concat(frames) #merge dataframes
Создает это:
ID AA TA TL ML
Date
2001 AAPL 1.0 44 50 NaN
2002 AAPL 3.0 33 51 NaN
2003 AAPL 2.0 22 53 NaN
2004 AAPL 5.0 11 76 NaN
2005 AAPL 2.0 33 44 NaN
2006 AAPL 3.0 22 12 NaN
2001 MSFT 3.5 44 NaN 12
2002 MSFT 6.7 33 NaN 15
2003 MSFT 2.3 22 NaN 19
2004 MSFT 5.5 11 NaN 20
2005 MSFT 2.2 33 NaN 43
2006 MSFT 3.2 22 NaN 23
С циклическим кодом, хотелось бы что-то вроде этого:
ID AA TA TL ML PP
Date
2001 AAPL 1.0 44 50 NaN NaN
2002 AAPL 3.0 33 51 NaN NaN
2003 AAPL 2.0 22 53 NaN NaN
2004 AAPL 5.0 11 76 NaN NaN
2005 AAPL 2.0 33 44 NaN NaN
2006 AAPL 3.0 22 12 NaN NaN
2001 MSFT 3.5 44 NaN 12 NaN
2002 MSFT 6.7 33 NaN 15 NaN
2003 MSFT 2.3 22 NaN 19 NaN
2004 MSFT 5.5 11 NaN 20 NaN
2005 MSFT 2.2 33 NaN 43 NaN
2006 MSFT 3.2 22 NaN 23 NaN
2001 TSLA 3.3 48 NaN NaN 18
2002 TSLA 6.3 38 NaN NaN 18
2003 TSLA 2.6 28 NaN NaN 18
2004 TSLA 5.3 18 NaN NaN 28
2005 TSLA 2.3 38 NaN NaN 48
2006 TSLA 3.3 28 NaN NaN 28