Как объединить две сводные таблицы без потери имени столбца - PullRequest
0 голосов
/ 08 июля 2019

Я пытаюсь объединить две сводные таблицы, но после объединения двух таблиц столбцы теряются.

Pivot1:

SATISFIED_CHECKOUT             1.0   2.0   3.0   4.0   5.0
SEGMENT                                                    
BOTH_TX_SPEND_GROWN            0.01  0.03  0.04  0.14  0.80
BOTH_TX_SPEND_NO_GROWTH        0.01  0.03  0.04  0.14  0.78
ONLY_SHOPPED_2018               NaN  0.03  0.04  0.15  0.78
ONLY_SHOPPED_2019              0.01  0.02  0.05  0.13  0.78
ONLY_SPEND_GROWN               0.01  0.02  0.03  0.12  0.82
ONLY_TX_GROWN                  0.01  0.03  0.03  0.14  0.79
SHOPPED_NEITHER                 NaN  0.04  0.02  0.15  0.79

Pivot2:

SATISFIED_FOOD                 1.0   2.0   3.0   4.0   5.0
SEGMENT                                                    
BOTH_TX_SPEND_GROWN            0.00  0.01  0.07  0.20  0.71
BOTH_TX_SPEND_NO_GROWTH        0.00  0.01  0.08  0.19  0.71
ONLY_SHOPPED_2018              0.01  0.01  0.07  0.19  0.71
ONLY_SHOPPED_2019              0.00  0.01  0.10  0.19  0.69
ONLY_SPEND_GROWN               0.00  0.01  0.08  0.18  0.72
ONLY_TX_GROWN                  0.00  0.02  0.07  0.19  0.72
SHOPPED_NEITHER                 NaN   NaN  0.10  0.20  0.70

Оригинальный df выглядит так:

SATISFIED_CHECKOUT         SATISFIED_FOOD           Persona
        1                         1            BOTH_TX_SPEND_GROWN 
        2                         3            BOTH_TX_SPEND_NO_GROWTH 
        3                         2            ONLY_SHOPPED_2019 
       ....                      ....             ............
        5                         3            ONLY_SHOPPED_2019

Я использую код:

a = pd.pivot_table(df,index=["SEGMENT"], columns=["SATISFIED_FOOD"], aggfunc='size').apply(lambda x: x / x.sum(), axis=1).round(2)

b = pd.pivot_table(df,index=["SEGMENT"], columns=["SATISFIED_CHECKOUT"], aggfunc='size').apply(lambda x: x / x.sum(), axis=1).round(2)

pd.concat([a, b],axis=1)

Результат как ниже:

                          1.0   2.0   3.0   4.0  ...   2.0   3.0   4.0   5.0
SEGMENT                                          ...                        
BOTH_TX_SPEND_GROWN      0.01  0.03  0.07  0.23  ...  0.03  0.04  0.14  0.80
BOTH_TX_SPEND_NO_GROWTH  0.01  0.03  0.06  0.22  ...  0.03  0.04  0.14  0.78
ONLY_SHOPPED_2018        0.01  0.04  0.08  0.24  ...  0.03  0.04  0.15  0.78
ONLY_SHOPPED_2019        0.01  0.03  0.08  0.25  ...  0.02  0.05  0.13  0.78
ONLY_SPEND_GROWN         0.00  0.03  0.07  0.22  ...  0.02  0.03  0.12  0.82
ONLY_TX_GROWN            0.01  0.02  0.05  0.22  ...  0.03  0.03  0.14  0.79
SHOPPED_NEITHER           NaN  0.01  0.07  0.28  ...  0.04  0.02  0.15  0.79
[7 rows x 15 columns]

Но что я хочу увидеть, это результат, как показано ниже:

                        SATISFIED_CHECKOUT             SATISFIED_FOOD
                          1.0   2.0   3.0   4.0  ...   2.0   3.0   4.0   5.0
SEGMENT                                          ...                        
BOTH_TX_SPEND_GROWN      0.01  0.03  0.07  0.23  ...  0.03  0.04  0.14  0.80
BOTH_TX_SPEND_NO_GROWTH  0.01  0.03  0.06  0.22  ...  0.03  0.04  0.14  0.78
ONLY_SHOPPED_2018        0.01  0.04  0.08  0.24  ...  0.03  0.04  0.15  0.78
ONLY_SHOPPED_2019        0.01  0.03  0.08  0.25  ...  0.02  0.05  0.13  0.78
ONLY_SPEND_GROWN         0.00  0.03  0.07  0.22  ...  0.02  0.03  0.12  0.82
ONLY_TX_GROWN            0.01  0.02  0.05  0.22  ...  0.03  0.03  0.14  0.79
SHOPPED_NEITHER           NaN  0.01  0.07  0.28  ...  0.04  0.02  0.15  0.79
[7 rows x 15 columns]
...