这项任务看似简单,但我被困在这里。 我有一个问题陈述,根据他们的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)
但我对这方面的数据感到失望。请分享
答案 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]