将列设为category会使pivot\u表不稳定。 这里有一个例子:
test = pd.DataFrame({'closing_mois': {6483: 'juillet',
19771: 'avril',
19105: 'avril',
8025: 'novembre',
22642: 'mai',
1216: 'juillet',
21634: 'décembre',
19230: 'décembre',
11429: 'décembre',
24755: 'juin'},
'closing_week': {6483: 28,
19771: 16,
19105: 16,
8025: 48,
22642: 20,
1216: 31,
21634: 49,
19230: 49,
11429: 52,
24755: 25},
'montant': {6483: 15830,
19771: 13637,
19105: 28197,
8025: 42671,
22642: 41290,
1216: 575,
21634: 898,
19230: 13814,
11429: 2006,
24755: 40633}})
test
给出:
^{pr2}$我们有正确的groupby:
test.groupby(["closing_mois", "closing_week"])["montant"].sum()
closing_mois closing_week
avril 16 41834
décembre 49 14712
52 2006
juillet 28 15830
31 575
juin 25 40633
mai 20 41290
novembre 48 42671
Name: montant, dtype: int64
但如果我把月份定为:
mois = OrderedDict({1:"janvier", 2:"février", 3:"mars", 4:"avril", 5: "mai", 6:"juin", 7:"juillet", 8:"août", 9:"septembre", 10:"octobre", 11:"novembre", 12:"décembre"})
cat = pd.Categorical(list(mois.values()), ordered=True)
test.closing_mois = test.closing_mois.astype(cat)
我有一个不正确的透视表:月份和值不一致:
test.pivot_table(index="closing_mois", columns="closing_week", values="montant", aggfunc=pd.Series.sum)
closing_week 16 20 25 28 31 48 49 52
closing_mois
juillet 41834.0 NaN NaN NaN NaN NaN NaN NaN
novembre NaN NaN NaN NaN NaN NaN 14712.0 2006.0
décembre NaN NaN NaN 15830.0 575.0 NaN NaN NaN
avril NaN NaN 40633.0 NaN NaN NaN NaN NaN
mai NaN 41290.0 NaN NaN NaN NaN NaN NaN
juin NaN NaN NaN NaN NaN 42671.0 NaN NaN
所以我把第52周和11月而不是12月联系起来。在
我做错什么了???在
尝试:
mois = OrderedDict({1:"janvier", 2:"février", 3:"mars", 4:"avril", 5: "mai", 6:"juin", 7:"juillet", 8:"août", 9:"septembre", 10:"octobre", 11:"novembre", 12:"décembre"})
test['closing_mois'] = pd.Categorical(test['closing_mois'],mois.values(), ordered=True)
res = test.pivot_table(index="closing_mois", columns="closing_week",values="montant", aggfunc='sum')
res
还是给了我:
closing_week 16 20 25 28 31 48 49 52
closing_mois
juillet 41834.0 NaN NaN NaN NaN NaN NaN NaN
novembre NaN 41290.0 NaN NaN NaN NaN NaN NaN
décembre NaN NaN 40633.0 NaN NaN NaN NaN NaN
avril NaN NaN NaN 15830.0 575.0 NaN NaN NaN
mai NaN NaN NaN NaN NaN 42671.0 NaN NaN
juin NaN NaN NaN NaN NaN NaN 14712.0 2006.0
6月第52周:-/
在Pandas 0.19.2/python3.6.0上测试
pd.Categorical
的第一个参数应该是一个序列,而不是一个详尽的类别列表。在另外,信任Pandas字符串映射是一个很好的实践,可以使用}。在
aggfunc='sum'
代替{结果
在Pandas中实现分类时,您将找到未使用类别和已使用类别的行:
^{pr2}$相关问题 更多 >
编程相关推荐