Как плотно расположиться в группе с ограничением суммы?

Я хочу использовать код group by и rank, но с условием, что если сумма контейнера превышает 2000, он должен быть помещен в следующую группу. Можно ли этого добиться в пандах?

У меня есть следующие данные:

+---+----------+--+------------------+
| 1 | Load No. |  |  Code  Weight    |
| 2 | 1        |  |  4000   200      |
| 3 | 2        |  |  4000  1800      |
| 4 | 3        |  |  4000   400      |
| 5 | 4        |  |  4000   1000     |
| 6 | 5        |  |  5000   1000     |
| 7 | 6        |  |  5000   800      |
| 8 | 7        |  |  5000   1200     |
+---+----------+--+------------------+

Вывод:

| 1 | Load No. | Code  Weight Container Total Sum 
| 2 | 1        | 4000   200     1         2000 
| 3 | 2        | 4000   1800    1         2000 
| 4 | 3        | 4000   400     2         1400 
| 5 | 4        | 4000   1000    2         1400 
| 6 | 5        | 5000   1000    3         1800 
| 7 | 6        | 5000   800     3         1800 
| 8 | 7        | 5000   1200    4         1200 

Большинство людей хотят видеть текст без форматирования изображения, вы можете использовать это для форматированной таблицы .. И SO не являются бесплатным сервисом кода .. я хочу не являются хорошим заявлением .. Покажите свои усилия ..

dwir182 27.12.2018 04:56

Я новичок в этом. Отредактируем это в форматированной таблице. Спасибо за предложение

Eashan Bhattacharyya 27.12.2018 16:09
Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
0
2
107
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Один из способов получить Container

s=df.Weight.cumsum()/2000
pd.cut(s,np.arange(0,max(s)+1,1)).cat.codes+1
0    1
1    1
2    2
3    2
4    3
5    3
6    4
dtype: int8
df['container']=pd.cut(s,np.arange(0,max(s)+1,1)).cat.codes+1

Затем мы используем transform

df['total sum']=df.groupby('container').Weight.transform('sum')
df
   LoadNo.  Code  Weight  container  total sum
0        1  4000     200          1       2000
1        2  4000    1800          1       2000
2        3  4000     400          2       1400
3        4  4000    1000          2       1400
4        5  5000    1000          3       1800
5        6  5000     800          3       1800
6        7  5000    1200          4       1200

Спасибо за ответ. Просто хотели понять, как сначала группировать по коду, а потом рассчитывать вес и делать тару?

Eashan Bhattacharyya 27.12.2018 16:58

@EashanBhattacharyya сделать первый шаг как функцию, затем сгруппировать по применению функции

BENY 27.12.2018 17:44

Спасибо за помощь @ W-B. Можете ли вы направить меня еще немного. Я не понимаю, как реализовать эту функцию. Я сделал такую ​​функцию: def added_weight (): s = data.ITEM_WEIGHT.cumsum () / 2000 container = pd.cut (s, np.arange (0, max (s) +1,1)). Cat. коды + 1 возвращают данные контейнера ['container'] = data.groupby ('code') ['Weight']. apply (added_weight (), axis = 1)

Eashan Bhattacharyya 28.12.2018 01:51

Другие вопросы по теме