根据pandas Dataframe中的salePercentage对产品进行分类

时间:2017-12-13 13:00:25

标签: python pandas

这项任务看似简单,但我被困在这里。  我有一个问题陈述,根据他们的salePercentage将产品分为3类(F,M,S)。以下是数据帧的快照。

                        grandTotal  saleRatio   
product             
587a                      33330841.0    11.147972 
58cb                        20050510.0  6.706177    
587e                        15157320.0  5.069581    
58cf                        11811805.0  3.950626    
58bg                       10723140.0   3.586506    

我需要为产生60%收入的产品组分配“F”状态。接下来30%将是'M',最后10%应该是'S'。

最好的方法是什么。我试过以下:

s=0
index_60=[]
index_30=[]
index_10=[]
for i in productSaleValue.index.values:
    if(s<=60):
        index_60.append(i)
        s=s+productSaleValue.saleRatio[i]
    if ((s>60)&(s<=90)):
        s=s+productSaleValue.saleRatio[i]
        index_30.append(i)
    elif ((s>90)&(s<=100)):
        s=s+productSaleValue.saleRatio[i]
        index_10.append(i)

但我对这方面的数据感到失望。请分享

1 个答案:

答案 0 :(得分:1)

您可以使用DataFrame.cumsum()获取列的累积总和。

查看示例:

import pandas as pd
import numpy as np
in_data = np.random.random(10)
df = pd.DataFrame()
df['A'] = in_data
df['fraction'] = df['A'] / df['A'].sum()
df.sort_values(by='fraction', inplace=True)
df['csum'] = df.fraction.cumsum()
df_60 = df[df.csum <= 0.60]
df_30 = df[(df.csum > 0.60) & (df.csum <= 0.90)]
df_10 = df[df.csum > 0.90]