#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)
Результат: