Python, Панды: отметьте строки сверху вниз, что составляет 80 процентов от общего объема продаж

#python #pandas #label

Вопрос:

У меня есть таблица продуктов и их проданных сумм в долларах. У меня есть общая сумма продаж, и я хочу знать, какие продукты составили 80 процентов от общей продажи, и отметьте их 1 в столбце «ярлык». Пожалуйста, обязательно отметьте 1 от наибольшего числа к наименьшему. Ниже общая сумма продаж составляет 32, из которых 80 процентов составляют 25,6. Таким образом, от наибольшего числа в столбце продано$ до наименьшего, если мы добавим строки 2,4,5 и 7, будет 26, что составляет 80 процентов от общего объема продаж, 32, и обозначим их 1, а остальные 0. Я хочу сделать это с питоном и пандами. Заранее спасибо. С уважением введите описание изображения здесь

Комментарии:

1. Пожалуйста, не публикуйте фотографии. Вместо этого вставьте все в виде текста. Кроме того, пожалуйста, предоставьте воспроизводимый образец ввода и ожидаемый результат.

2. фотография опубликована, чтобы помочь. текст есть, чтобы объяснить проблему. ожидаемые входные и выходные данные тоже есть.

Ответ №1:

Рассчитайте долю продаж для каждого продукта, отсортируйте их по долям, рассчитайте их совокупную сумму и используйте это, чтобы получить топ-80%

 cumsum = (df["sold"]/df["sold"].sum()).sort_values().cumsum() df["label"] = pd.Series(0, index=cumsum.index).where(cumsum lt;= 0.2, 1)  

Ответ №2:

Вы можете обойтись:

 import pandas as pd import numpy as np  data = {'productID':[1,2,3,4,5,6,7],'sold

Результат:

 productID sold$ Label 0 1 2 0 1 2 4 1 2 3 3 0 3 4 8 1 4 5 5 1 5 6 1 0 6 7 9 1  


:[2,4,3,8,5,1,9]} df=pd.DataFrame(data) df.sort_values('soldРезультат:


,inplace=True) df['Label']=np.where(df['sold

Результат:


].cumsum()lt;=df['soldРезультат:


].sum() * 0.2,0,1) df.sort_index(inplace=True) print (df)

Результат: