Python For循环将数据帧与公共列合并

Python For循环将数据帧与公共列合并,python,pandas,dataframe,Python,Pandas,Dataframe,我有25个数据框,每个数据框有7个升序日期(行),570-600个机场名称(列)。最大的问题是,由于数据帧存储每个机场每天的上升次数,某些机场处于非活动状态的几周导致数据帧具有不同的顺序和数量的相似和不相似机场名称。所有列名将按字母顺序出现在每个数据帧中,但是数据帧中缺少一个airport列会扰乱主数据帧的整个对齐 我尝试过合并、合并、加入、更新……这个问题真的很复杂,我的最终目标是拥有一个主数据框架,其中所有现有的按字母顺序排列的机场都是列,随着日期的上升和时间的推移,正在进行的行 我想我必须

我有25个数据框,每个数据框有7个升序日期(行),570-600个机场名称(列)。最大的问题是,由于数据帧存储每个机场每天的上升次数,某些机场处于非活动状态的几周导致数据帧具有不同的顺序和数量的相似和不相似机场名称。所有列名将按字母顺序出现在每个数据帧中,但是数据帧中缺少一个airport列会扰乱主数据帧的整个对齐

我尝试过合并、合并、加入、更新……这个问题真的很复杂,我的最终目标是拥有一个主数据框架,其中所有现有的按字母顺序排列的机场都是列,随着日期的上升和时间的推移,正在进行的行

我想我必须做一个for循环才能做到这一点: 1.任何数据都不会丢失 2.它需要按列合并数据帧,这样,如果第二个数据帧的列名与第一个数据帧的列名相同,则新数据将添加到该列的下面,而不会再次重复列名。 3.如果第二列的列名与第一列的列名不同,我希望将该列添加为新列(希望按字母顺序)。 4.如果第二个数据帧没有第一个数据帧所具有的列,我希望该机场的数据帧为NAN

总之,我希望for循环要做的主要部分是在相同的列下添加数据(即使dataframes的列顺序不正确),添加以前不存在的列,在缺少机场的位置填写NAN,并确保列名仅显示为0行。对不起,很难解释

下面是我希望for循环能够合并的两个简单数据帧示例

df1 = pd.DataFrame(np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9]]),
                    columns=['Airport1', 'Airport3', 'Airport4'])
df1.index.name='Dates'
df1.index=['11/01','11/02','11/03']
df2 = pd.DataFrame(np.array([[2, 4, 6], [8, 10, 12], [14, 16, 18]]),
                    columns=['Airport1', 'Airport2', 'Airport3'])
df2.index.name='Dates'
df2.index=['11/04','11/05','11/06']
display(df1,df2)

Dates **Airport1** **Airport3** **Airport4** 
11/01   1.            2.          3.  
11/02   4.            5.          6.   
11/03   7.            8.          9.

Dates **Airport1** **Airport2** **Airport3**
11/04   2.           4.           6
11/05   8.           10.          12
11/06   14.          16.          18
我希望for循环的结果是:

Dates **Airport1** **Airport2** **Airport3** **Airport4**
11/01   1.              NAN.         2.           3
11/02.  4.              NAN.         5.           6
11/03.  7.              NAN.         8.           9
11/04.  2.               4.          6.          NAN      
11/05.  8.              10.          12.         NAN
11/06.  14.             16.          18.         NAN
另一个注意事项是,我有25个数据帧要合并和计数,所以我希望for循环能够接收无限个数据帧。提前谢谢你

IIUC,您可以尝试:

如果有两个以上的数据帧,请使用:

from functools import reduce

dfs = [df1, df2] # list of all dataframes that need's to be combined
df = reduce(lambda d1, d2: pd.concat([d1, d2]), dfs).sort_index(axis=1)
结果:

# print(df)

       Airport1  Airport2  Airport3  Airport4
11/01         1       NaN         2       3.0
11/02         4       NaN         5       6.0
11/03         7       NaN         8       9.0
11/04         2       4.0         6       NaN
11/05         8      10.0        12       NaN
11/06        14      16.0        18       NaN
# print(df)

       Airport1  Airport2  Airport3  Airport4
11/01         1       NaN         2       3.0
11/02         4       NaN         5       6.0
11/03         7       NaN         8       9.0
11/04         2       4.0         6       NaN
11/05         8      10.0        12       NaN
11/06        14      16.0        18       NaN