每个品牌的客户数

时间:2019-08-26 20:41:22

标签: python pandas dataframe

我正在使用包含客户信息的数据集进行实验/学习。

DataFrame结构如下(这些都是记录):

import pandas as pd

df = pd.DataFrame({'cus_id' : [111, 222, 333, 444, 555, 666, 777, 888, 999], 
                   'cus_brand_id' : ['ABCD_111', 'ABCD_222', 'EFG_333', 'EFG_444', 'H_555', 'IJ_666', 'IJ_777', 'IJ_888', 'K_999']})
print(df)

   cus_id cus_brand_id
0     111     ABCD_111
1     222     ABCD_222
2     333      EFG_333
3     444      EFG_444
4     555        H_555
5     666       IJ_666
6     777       IJ_777
7     888       IJ_888
8     999        K_999

如您所见,客户可以属于以下五个品牌之一:ABCDEFGHIJK

我的目标是计算每个品牌的客户数量。也就是说,我要生成以下输出表:

| ABCD | 2 |
| EFG  | 2 |
| H    | 1 |
| IJ   | 3 |
| K    | 1 |

这是一个简单的示例,但是我正在使用的实际数据集遵循相同的结构。具体来说,每个cus_brand_id条目都以一些大写字母开头,后跟一个下划线,再加上一些数字。

我尝试过的一件事是使用split系列上的cus_brand_id方法将品牌与ID隔离开来,但是我不知道如何从这里继续。

cus_brand = df['cus_brand_id'].str.split('_')
print(cus_brand)

0    [ABCD, 111]
1    [ABCD, 222]
2     [EFG, 333]
3     [EFG, 444]
4       [H, 555]
5      [IJ, 666]
6      [IJ, 777]
7      [IJ, 888]
8       [K, 999]
Name: cus_brand_id, dtype: object

2 个答案:

答案 0 :(得分:3)

您可以先使用api.addAsyncRequestTransform(request => async () => { await AsyncStorage.load('something') }) 提取它们:

api.addAsyncRequestTransform(request => async() => {
   await msalService.loginSilent().then(login => {
      api.setHeader('Token', login.rawIdToken);
   });
});

因此我们可以通过以下方式获得品牌

.str[0]

并使用以下方法计算客户数量:

>>> df['cus_brand_id'].str.split('_').str[0]
0    ABCD
1    ABCD
2     EFG
3     EFG
4       H
5      IJ
6      IJ
7      IJ
8       K
Name: cus_brand_id, dtype: object

或具有以下条件的唯一客户的数量:

df['brand'] = df['cus_brand_id'].str.split('_').str[0]

答案 1 :(得分:1)

In [1]:
import pandas as pd

df = pd.DataFrame({'cus_id' : [111, 222, 333, 444, 555, 666, 777, 888, 999], 
                   'cus_brand_id' : ['ABCD_111', 'ABCD_222', 'EFG_333', 'EFG_444', 'H_555', 'IJ_666', 'IJ_777', 'IJ_888', 'K_999']})

# new data frame with split value columns 
new = df["cus_brand_id"].str.split("_", n = 1, expand = True) 

df["brand"]= new[0] 

df["brand_id"]= new[1] 

# Dropping old cus_brand_id columns 
df.drop(columns =["cus_brand_id"], inplace = True)

# df display 
df.groupby(by='brand')['cus_id'].count()

Out [1]:
brand
ABCD    2
EFG     2
H       1
IJ      3
K       1
Name: cus_id, dtype: int64

编辑:

您随时可以在.count()之后添加.to_frame(),以使用数据框布局而不是序列。或to_dict()拥有以品牌为关键词的字典