Pivot_table求和:KeyError('%s不在索引'%objarr [mask]中)

时间:2017-06-26 19:36:13

标签: python pandas

我有一张表:

    Category Customer  Month  Year            Unit Unit Symbol  Value
0        AF   Brand1      1  2017     Gross Sales           $      1
1        AF   Brand1      1  2017  Sales quantity         EAU      1
2        AF   Brand1      2  2017     Gross Sales           $      1
3        AF   Brand1      2  2017  Sales quantity         EAU      1
4        AF   Brand1      3  2017     Gross Sales           $      1
5        AF   Brand1      3  2017  Sales quantity         EAU      1
6        AF   Brand1      4  2017     Gross Sales           $      1
7        AF   Brand1      4  2017  Sales quantity         EAU      1
8        AF   Brand1      5  2017     Gross Sales           $      1
9        AF   Brand1      5  2017  Sales quantity         EAU      1
10       AF   Brand2      1  2017     Gross Sales           $      1
11       AF   Brand2      1  2017  Sales quantity         EAU      1
12       AF   Brand2      2  2017     Gross Sales           $      1
13       AF   Brand2      2  2017  Sales quantity         EAU      1
14       AF   Brand2      3  2017     Gross Sales           $      1
15       AF   Brand2      3  2017  Sales quantity         EAU      1
16       AF   Brand2      4  2017     Gross Sales           $      1
17       AF   Brand2      4  2017  Sales quantity         EAU      1
18       AF   Brand2      5  2017     Gross Sales           $      1
19       AF   Brand2      5  2017  Sales quantity         EAU      1

我已经加载到内存

我想删除Customer列,并聚合其他列值相同的Value列forall记录。

EG:对于Category,Month,Year,Unit和Symbol相同的所有记录,我希望将Value字段汇总到一个新框架中,如下所示:

Category Month  Year            Unit Unit Symbol  Value
0   AF    1     2017     Gross Sales           $      2
1   AF    1     2017  Sales quantity         EAU      2
2   AF    2     2017     Gross Sales           $      2
3   AF    2     2017  Sales quantity         EAU      2
4   AF    3     2017     Gross Sales           $      2
5   AF    3     2017  Sales quantity         EAU      2
6   AF    4     2017     Gross Sales           $      2
7   AF    4     2017  Sales quantity         EAU      2
8   AF    5     2017     Gross Sales           $      2
9   AF    5     2017  Sales quantity         EAU      2

我尝试过不同的变体:

df.pivot_table(columns=['Unit', 'Unit Symbol', 'month', 'year'], index='Category', aggfunc=sum, values="Value")

但它总是返回错误,例如KeyError('%s not in index' % objarr[mask])后跟我的客户列表。这对我来说没有意义,因为我正在转移我的数据以摆脱我的客户并聚合。

我有12个不同的客户和13个不同的类别。并非所有客户都具有所有类别,反之亦然。他们的关联随着时间的推移而变化,因此对此进行硬编码是不切实际的。

如何以这种方式汇总我的表?

1 个答案:

答案 0 :(得分:4)

df.pivot_table(index=['Category','Month','Year','Unit','Unit Symbol'],values="Value",aggfunc=np.sum).reset_index().assign(Customer='Total')

输出:

  Category  Month  Year            Unit Unit Symbol  Value Customer
0       AF      1  2017     Gross Sales           $      2    Total
1       AF      1  2017  Sales quantity         EAU      2    Total
2       AF      2  2017     Gross Sales           $      2    Total
3       AF      2  2017  Sales quantity         EAU      2    Total
4       AF      3  2017     Gross Sales           $      2    Total
5       AF      3  2017  Sales quantity         EAU      2    Total
6       AF      4  2017     Gross Sales           $      2    Total
7       AF      4  2017  Sales quantity         EAU      2    Total
8       AF      5  2017     Gross Sales           $      2    Total
9       AF      5  2017  Sales quantity         EAU      2    Total