Pandas 循环并合并具有相同索引、相同列的数据帧(但每个数据帧只有几列)
所需任务的描述Pandas 循环并合并具有相同索引、相同列的数据帧(但每个数据帧只有几列),pandas,loops,dataframe,merge,concat,Pandas,Loops,Dataframe,Merge,Concat,所需任务的描述 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 datafr
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
我使用下面的代码来合并df
和df1
(显示的示例数据),它可以很好地满足我的需要。但是,我需要循环大量数据帧(df2
,例如,但将是df3
,df4
等),并且不确定如何修改代码。我有相同索引、相同列的数据帧,但是每个数据帧都有一些列。我使用了下面的代码,它工作得很好,但我希望对其进行修改,以便我可以循环使用df
和df1
,将它们合并在一起,创建requireddata
,然后在requireddata
与df2
合并的地方重复此操作。同样的逻辑将继续与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
使用循环代码,您会喜欢这样的东西:
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
我认为这里不需要列差异,只需使用,列正确对齐:
df = pd.concat([df,df1,df2], sort=False)
print (df)
ID AA TA TL ML PP
Date
2001 AAPL 1.0 44 50.0 NaN NaN
2002 AAPL 3.0 33 51.0 NaN NaN
2003 AAPL 2.0 22 53.0 NaN NaN
2004 AAPL 5.0 11 76.0 NaN NaN
2005 AAPL 2.0 33 44.0 NaN NaN
2006 AAPL 3.0 22 12.0 NaN NaN
2001 MSFT 3.5 44 NaN 12.0 NaN
2002 MSFT 6.7 33 NaN 15.0 NaN
2003 MSFT 2.3 22 NaN 19.0 NaN
2004 MSFT 5.5 11 NaN 20.0 NaN
2005 MSFT 2.2 33 NaN 43.0 NaN
2006 MSFT 3.2 22 NaN 23.0 NaN
2001 TSLA 3.3 48 NaN NaN 18.0
2002 TSLA 6.3 38 NaN NaN 18.0
2003 TSLA 2.6 28 NaN NaN 18.0
2004 TSLA 5.3 18 NaN NaN 28.0
2005 TSLA 2.3 38 NaN NaN 48.0
2006 TSLA 3.3 28 NaN NaN 28.0
IIUC,将数据帧合并为一个。为什么不直接连接数据帧呢?局部放电电流([df,df1,df2])。还有其他规则您没有提到吗?如果我是您,我将使用带有日期和IDIf的多索引,如果您想要concat
pd.concat([df,df1,df2],sort=False)