python - For 循环将 pandas 数据框与公共(public)列合并

标签 python pandas dataframe

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

我尝试过合并、连接、连接、更新...这个问题非常复杂,我的最终目标是拥有一个主数据框,其中所有现有的按字母顺序排列的机场作为列,并随着日期的上升和时间的流逝而持续行.

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

总之,我希望 for 循环执行的主要部分是在相同的列下添加数据(即使数据帧的列乱序),添加以前不存在的列,填写机场所在的 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,你可以试试pd.concat以及df.sort_index :

df = pd.concat([df1, df2]).sort_index(axis=1)

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

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

关于python - For 循环将 pandas 数据框与公共(public)列合并,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62088372/

相关文章:

R 数据框过滤器并计算唯一条目

python - Pandas 数据帧列中值的最大差异

Python:IOError:[Errno 2]没有这样的文件或目录(Raspberry PI)

python - 相机校准 - 无法检测棋盘

python - 改进 PySpark DataFrame.show 输出以适应 Jupyter 笔记本

python - Pandas,具有附加列字符串的唯一条件

python - 类型错误:只能将列表(不是 "int")连接到列表 4

python - 如何提取lxml中指定的div表数据?

python - 如何将简单的网络数据帧更改为相关表?

python - 将每个主题有很多行的 DataFrame 减少为每个主题一行