Сводные данные панд и добавить столбец


Я пытаюсь добавить суммированный столбец в сводный фрейм данных, но постоянно получаю ошибку анализа данных.

mydata = [{'amount': 3200, 'close_date':'2013-03-31', 'customer': 'Customer 1',},
          {'amount': 1430, 'close_date':'2013-11-30', 'customer': 'Customer 2',},
          {'amount': 4320, 'close_date':'2014-03-31', 'customer': 'Customer 3',},
          {'amount': 2340, 'close_date':'2015-05-18', 'customer': 'Customer 4',},
          {'amount': 4320, 'close_date':'2015-06-29', 'customer': 'Customer 5',},]
df = pd.DataFrame(mydata)
>>> df.dtypes
amount         int64
close_date    object
customer      object
dtype: object

Я преобразую в даты, а затем отображаю в виде кварталов

df.close_date = pd.to_datetime(df.close_date)
>>> df.dtypes
amount                 int64
close_date    datetime64[ns]
customer              object
dtype: object

df.close_date = df.close_date.dt.to_period('Q')

Затем я поворачиваюсь:

pivot = pd.pivot_table(df,index='customer',columns='close_date')

Наконец, я хочу суммировать строки и столбцы, но мой этот кусок кода, похоже, не будет добавлять столбец...

pivot['sum'] = pivot.sum(axis=1)

Что я делаю не так?

1 2

1 ответ:

Вы можете просто установить поля в True.

df['close_date'] = pd.to_datetime([cd.to_period('Q') for cd in df.close_date])
pivot = pd.pivot_table(df,index='customer',columns='close_date', margins=True)

>>> pivot
            amount                        
close_date     172   175   176   181   All
customer                                  
Customer 1    3200   NaN   NaN   NaN  3200
Customer 2     NaN  1430   NaN   NaN  1430
Customer 3     NaN   NaN  4320   NaN  4320
Customer 4     NaN   NaN   NaN  2340  2340
Customer 5     NaN   NaN   NaN  4320  4320
All            NaN   NaN   NaN   NaN  3122

Можно также суммировать столбцы следующим образом:

pivot = pd.pivot_table(df,index='customer',columns='close_date')
pivot['sum'] = pivot.sum(axis=1)

>>> pivot
            amount                     sum
close_date     172   175   176   181      
customer                                  
Customer 1    3200   NaN   NaN   NaN  3200
Customer 2     NaN  1430   NaN   NaN  1430
Customer 3     NaN   NaN  4320   NaN  4320
Customer 4     NaN   NaN   NaN  2340  2340
Customer 5     NaN   NaN   NaN  4320  4320

И вот как можно суммировать строки:

pivot.ix['Total'] = pivot.sum()

>>> pivot
           amount                     
close_date 2013Q1 2013Q4 2014Q1 2015Q2
customer                              
Customer 1   3200    NaN    NaN    NaN
Customer 2    NaN   1430    NaN    NaN
Customer 3    NaN    NaN   4320    NaN
Customer 4    NaN    NaN    NaN   2340
Customer 5    NaN    NaN    NaN   4320
Total        3200   1430   4320   6660