[英]build df from sum of column value
我需要按 customer_id 對數據進行分組並獲取每個月的購買總和。 我的數據如下所示:
cust_id months
1 1
1 1
1 2
1 4
2 1
2 1
所以我需要查看每個月和每個客戶的購買總額。 所需的 output 是:
cust_id mo1 mo2 mo3 mo4
1 2 1 0 1
1 2 0 0 0
使用帶有DataFrame.reindex
的crosstab
來添加缺失的類別:
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
或者按range
reindex
所有月份:
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
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.