我试图将一个求和列添加到一个透视数据框,但不断收到数据解析错误。
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)
我做错了什么?
答案 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