簡體   English   中英

從列值的總和構建 df

[英]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.reindexcrosstab來添加缺失的類別:

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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM