Я хочу использовать код 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
Я новичок в этом. Отредактируем это в форматированной таблице. Спасибо за предложение






Один из способов получить 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
Спасибо за ответ. Просто хотели понять, как сначала группировать по коду, а потом рассчитывать вес и делать тару?
@EashanBhattacharyya сделать первый шаг как функцию, затем сгруппировать по применению функции
Спасибо за помощь @ 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)
Большинство людей хотят видеть текст без форматирования изображения, вы можете использовать это для форматированной таблицы .. И SO не являются бесплатным сервисом кода .. я хочу не являются хорошим заявлением .. Покажите свои усилия ..