groupby().sum()
した結果に対して pandas.qcut()
を使用してカテゴリ変数を追加すると良いかと思います。
https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.qcut.html
あとは元のデータにランク情報をDataFrame.join()
やDataFrame.merge()
を使って反映させるだけです。
以下に簡単ですがサンプルを書きましたので参考にしてください
Python
1import pandas as pd
2import numpy as np
3
4N=100
5# 適当なデータを生成
6df = pd.DataFrame({
7 '顧客id': np.random.randint(1,11,N),
8 '購買金額': np.random.choice(range(50,1000+1,50),N),
9})
10print(df.head())
11# 購買金額 顧客id
12#0 800 2
13#1 300 4
14#2 650 10
15#3 600 1
16#4 250 9
17
18# 購入金額の合計に応じてユーザーにランクのラベルを付ける
19user_df = df.groupby('顧客id')['購買金額'].sum().to_frame()
20user_df['ランク'] = pd.qcut(user_df['購買金額'], [0., 0.3, 0.7, 1.], labels=['Light','Middle','High'])
21print(user_df)
22# 購買金額 ランク
23#顧客id
24#1 7050 High
25#2 3800 Light
26#3 3700 Light
27#4 6000 Middle
28#5 7500 High
29#6 1300 Light
30#7 6400 Middle
31#8 5600 Middle
32#9 4100 Middle
33#10 7300 High
34
35# 元のデータにランクのラベルを反映
36df = df.merge(user_df.loc[:,['ランク']].reset_index(), on='顧客id', how='left')
37print(df.head())
38 購買金額 顧客id ランク
39#0 800 2 Light
40#1 300 4 Middle
41#2 650 10 High
42#3 600 1 High
43#4 250 9 Middle
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2019/03/22 00:14