Python 合并包含一些相同和不同列名的数据帧字典?

Python 合并包含一些相同和不同列名的数据帧字典?,python,pandas,dataframe,dictionary,Python,Pandas,Dataframe,Dictionary,我有一个数据帧字典,如: {'A_all4': region A_all4_count total A_all4_percent 0 AP 0 40 0.0 1 ESA 0 21 0.0 2

我有一个数据帧字典,如:

  {'A_all4':             region     A_all4_count  total  A_all4_percent
0                            AP             0        40             0.0
1                            ESA            0        21             0.0
2                            CA             0        16             0.0
3                            LA             0        33             0.0
4                            NA             0        20             0.0
5                            WA             0        25             0.0
6                            EA             0        39             0.0,
'PA_all4':               region      PA_all4_count  total  PA_all4_percent
0                            AP             0        40             0.0
1                            ESA            0        21             0.0
2                            CA             0        16             0.0
3                            LA             0        33             0.0
4                            NA             0        20             0.0
5                            WA             0        25             0.0
6                            EA             0        39             0.0,
'NA_all4':              region       NA_all4_count  total  NA_all4_percent
0                          AP               0       40              0.0
1                          SA               4       21              19.0
2                          CA               1       16              6.2
3                          LA               0       33              0.0
4                          NA               2       20              10.0
5                          WA               2       25              8.0
6                          EA               0       39              0.0}
我想合并字典中所有不同的数据帧,这样我就有了一个最终的数据帧,它合并了所有不同的count和percent列,但只有一个region和total列

例如:

     region      total       A_all4_count.   A_all4_percent     P_all4_count      P_all4_perct       NA_all4_count           NA_all4_perc
       AP          40             0               0.0                 0                0.0                0                  0
       ESA         21             0               0.0                 0                 0.0               4                  19.0
       CA          16             0               0.0                 0                 0.0               1                  6.2
       LA          33.            0               0.0                 0                 0.0               0                  0.0
       NA          20             0.              0.0                 0                 0.0               2                  10.0
等等

我试过使用

  pd.concat(d, axis=1).sum(axis=1, level=0)

但这并不能满足我的要求。

要连续进行
合并
,可以运行for循环或
reduce

从functools导入reduce
结果=减少(lambda df_1,df_2:pd.merge(df_1,df_2),dict_of_dfs.values())

其中第一个参数是一个接受2个df并合并它们的函数。字典的值,即数据帧,是以这种方式减少的。

您可以为列表中的3个数据帧定义所需的列,然后使用字典项为每个数据帧与所选列列表合并,如下所示:

假设数据帧的dict被称为
d

A_all4_col = ['region', 'total',  'A_all4_count', 'A_all4_percent']
PA_all4_col = ['PA_all4_count', 'PA_all4_percent']
NA_all4_col = ['NA_all4_count', 'NA_all4_percent']

pd.concat([d['A_all4'][A_all4_col], 
           d['PA_all4'][PA_all4_col], 
           d['NA_all4'][NA_all4_col]], axis=1)
结果:

     region  total  A_all4_count  A_all4_percent  PA_all4_count  PA_all4_percent  NA_all4_count  NA_all4_percent
0        AP     40             0             0.0              0              0.0              0              0.0
1       ESA     21             0             0.0              0              0.0              4             19.0
2        CA     16             0             0.0              0              0.0              1              6.2
3        LA     33             0             0.0              0              0.0              0              0.0
4       NaN     20             0             0.0              0              0.0              2             10.0
5        WA     25             0             0.0              0              0.0              2              8.0
6        EA     39             0             0.0              0              0.0              0              0.0
0  Globally    194             0             0.0              0              0.0              9              4.6