gpt4 book ai didi

python - 如何在Python中对两列进行透视和排序?

转载 作者:行者123 更新时间:2023-12-01 08:20:37 24 4
gpt4 key购买 nike

我有一个包含客户、商品类别及其价格的超大型数据框。我想做一些初步调查:

  • 根据总支出确定排名前列的客户,例如 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

非常感谢!

最佳答案

这是更好的聚合sum避免MultiIndex在列中。

第一个聚合sum :

s = df.groupby('cust')['val0'].sum()
print (s)
cust
cust0 2.54
cust1 7.19
cust2 1.25
Name: val0, dtype: float64

然后通过 Series.nlargest 获取最高值:

top5 = s.nlargest(5)
print (top5)
cust
cust1 7.19
cust0 2.54
cust2 1.25
Name: val0, dtype: float64

如有必要,仅按 boolean indexing 过滤前 5 个值和 isin :

df1 = df[df['cust'].isin(top5.index)].copy()
#print(df1)

正确订购cust创建有序分类并按两个过滤列进行聚合,最后按第一级排序 cust带柱size :

df1['cust'] = pd.Categorical(df1['cust'], ordered=True, categories=top5.index)
df2 = (df1.groupby(['cust','cat'])['val0'].agg([np.size,np.sum])
.sort_values(['cust','size'], ascending=[True, False])
.reset_index())
print (df2)
cust cat size sum
0 cust1 cat4 6.0 4.27
1 cust1 cat0 2.0 0.44
2 cust1 cat1 2.0 0.43
3 cust1 cat2 2.0 0.98
4 cust1 cat3 2.0 1.07
5 cust0 cat1 1.0 0.94
6 cust0 cat2 1.0 0.66
7 cust0 cat3 1.0 0.03
8 cust0 cat4 1.0 0.91
9 cust2 cat1 2.0 1.25

最后一个枢轴和绘图 DataFrame.plot.bar :

df2.pivot('cust','cat','size').plot.bar()

关于python - 如何在Python中对两列进行透视和排序?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54672120/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com