【发布时间】:2019-07-07 09:37:00
【问题描述】:
我有一个包含客户、商品类别及其价格的超大型数据框。我想做一些初步调查:
- 根据总支出确定前 5 个客户,例如 n=5。
- 为每个客户确定他们花费最多的类别。
- 然后可能按降序绘制显示最高客户的图 他们的名字是X,他们的消费是Y。对于每个人,如何显示他们的购物类别?
这需要旋转和排序。这是一个样本数据生成器,感谢here。
import numpy as np
import pandas as pd
from numpy.core.defchararray import add
np.random.seed(42)
n = 20
cols = np.array(['cust', 'cat'])
arr1 = (np.random.randint(5, size=(n, 2)) // [2, 1]).astype(str)
df = pd.DataFrame(
add(cols, arr1), columns=cols
).join(
pd.DataFrame(np.random.rand(n, 1).round(2)).add_prefix('val')
)
print(df)
df.pivot_table(index=['cust'],values=['val0'],aggfunc=[np.sum])
df.pivot_table(index=['cust','cat'],values=['val0'],aggfunc=[np.size,np.sum])
# the order according the previous line should be cust1,cust0,cust2. How to do? The following is the desired output in this case.
size sum
val0 val0
cust cat
cust1 cat4 6.0 4.27
cat3 2.0 1.07
cat2 2.0 0.98
cat0 2.0 0.44
cat1 2.0 0.43
cust0 cat1 1.0 0.94
cat4 1.0 0.91
cat2 1.0 0.66
cat3 1.0 0.03
cust2 cat1 2.0 1.25
非常感谢!
【问题讨论】:
-
你的熊猫版本是什么?
-
我使用的是熊猫 0.23.4
-
你需要阴谋蝙蝠吗?还是线条?
-
bar 会更好,当我得到第一个解决方案时我可以更改它。
-
已编辑答案,请检查。
标签: python pandas pivot pivot-table pandas-groupby