我需要按 customer_id 對資料進行分組并獲取每個月的購買總和。我的資料如下所示:
cust_id months
1 1
1 1
1 2
1 4
2 1
2 1
所以我需要查看每個月和每個客戶的購買總和。所需的輸出是:
cust_id mo1 mo2 mo3 mo4
1 2 1 0 1
1 2 0 0 0
uj5u.com熱心網友回復:
使用crosstabwithDataFrame.reindex添加缺失的類別:
r = range(df['months'].min(), df['months'].max() 1)
df = (pd.crosstab(df['cust_id'],df['months'])
.reindex(r, axis=1, fill_value=0)
.add_prefix('mo'))
print (df)
months mo1 mo2 mo3 mo4
cust_id
1 2 1 0 1
2 2 0 0 0
如果需要所有月份都可以使用有序分類:
df['months'] = pd.Categorical(df['months'], ordered=True, categories=range(1, 13))
df = df.groupby(['cust_id','months']).size().unstack(fill_value=0).add_prefix('mo')
print (df)
months mo1 mo2 mo3 mo4 mo5 mo6 mo7 mo8 mo9 mo10 mo11 mo12
cust_id
1 2 1 0 1 0 0 0 0 0 0 0 0
2 2 0 0 0 0 0 0 0 0 0 0 0
或所有月份reindex:range
r = range(1, 13)
df = (pd.crosstab(df['cust_id'],df['months'])
.reindex(r, axis=1, fill_value=0)
.add_prefix('mo'))
print (df)
months mo1 mo2 mo3 mo4 mo5 mo6 mo7 mo8 mo9 mo10 mo11 mo12
cust_id
1 2 1 0 1 0 0 0 0 0 0 0 0
2 2 0 0 0 0 0 0 0 0 0 0 0
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/431699.html
上一篇:使用熊貓將值提取到新列
