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

标签 python pandas

这个任务看起来很简单,但我被困在这里了。 我有一个问题陈述,根据产品的销售百分比将产品分为 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)

但我正在失去这方面的数据。欢迎分享

最佳答案

您可以使用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]

关于python - 根据 pandas Dataframe 中的 salePercentage 对产品进行分类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47793671/

相关文章:

python - 防止第二个进程监听 Python 中的同一个管道

python - Twisted 有什么了不起的?

python - 如何使用 python 在 zip 中打开 zip 中的 csv?

python - 某些列的 Pandas 平均值

python - pandas 中的总和值(如果它们按层次顺序排列)

Python:上下文版本冲突: Pandas 0.22.0; Requirement.parse ('pandas<0.22,>=0.19' ), {'scikit-survival' })

python - 为什么 numpy 计算不受全局解释器锁的影响?

python - Python 中的 SVD 内存错误

python - 执行嵌入在 Python 脚本中的 .exe 文件

python - 在不创建 for 循环或函数的情况下对每一列进行线性回归