Pandas df.pivot_table - aggfunc = sum不产生所需的输出

时间:2018-04-18 14:20:17

标签: python pandas dataframe pivot-table

假设我有一个数据框sega_df

MONTH            Character     Rings    Chili Dogs  Emeralds  
0    Jun 2017    Sonic          25.0          10.0       6.0
5    Jun 2017    Sonic          19.0          15.0       0.0
8    Jun 2017    Shadow         4.0           1.0        0.0
9    Jun 2017    Shadow         23.0          1.0        0.0
12   Jun 2017    Knuckles       9.0           3.0        1.0 
13   Jun 2017    Tails          10.0          6.0        0.0
22   Jul 2017    Sonic          5.0           20.0       0.0
23   Jul 2017    Shadow         3.0           3.0        7.0
24   Jul 2017    Knuckles       9.0           4.0        0.0
27   Jul 2017    Knuckles       11.0          2.0        0.0    
28   Jul 2017    Tails          12.0          3.0        0.0  
29   Jul 2017    Tails          12.0          5.0        0.0

我的pivot_table命令为我提供了每个字符对每个字符的表格输出,但这些值是一系列随机Nan00是因为在以后的几个月中有更多数据为0,我只发布了前几行。 三列(RingsChili DogsEmeralds)中的值的数据类型为numpy.float64,因此如果影响它,我也很好奇,或者如果我定义aggfunc

我的values参数和pivot_table命令如下:

values = list(sega_df.columns.values)
test = pd.pivot_table(data = sega_df, values = values, index = 'Character', columns = 'MONTH', aggfunc='sum')

这是我想要的pivot_table输出, - 每个字符每月三列的总和(例如,六月份的Sonic是[25 + 10 + 6 + 19 + 15 + 0] = 75.0):

MONTH            Jun 2017       Jul 2017            
Character            
0    Sonic       75.0           25.0          
1    Shadow      29.0           18.0          
2    Knuckles    13.0           26.0           
3    Tails       16.0           32.0         

1 个答案:

答案 0 :(得分:2)

只需要groupby sumsum axis = 1,然后我们unstack

df.groupby(['Character','MONTH']).sum().sum(1).unstack()
Out[953]: 
MONTH      Jul2017  Jun2017
Character                  
Knuckles      26.0     13.0
Shadow        13.0     29.0
Sonic         25.0     75.0
Tails         32.0     16.0