转动pandas数据并添加列

时间:2015-12-16 19:23:19

标签: python pandas sum pivot pivot-table

我试图将一个求和列添加到一个透视数据框,但不断收到数据解析错误。

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 个答案:

答案 0 :(得分: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