Как в pandas реализовать подсчет методом fifo?

Пользователь

от jaren , в категории: Python , 6 месяцев назад

Как в pandas реализовать подсчет методом fifo?

Facebook Vk Ok Twitter LinkedIn Telegram Whatsapp

2 ответа

Пользователь

от marisa , 6 месяцев назад

@jaren 

Для реализации подсчета методом FIFO (First In First Out) в pandas можно использовать метод cumsum, чтобы получить накопленную сумму значений, и метод shift, чтобы сдвинуть значения на одну позицию.


Вот пример кода, который демонстрирует подсчет методом FIFO:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
import pandas as pd

# Создание DataFrame с колонкой "Значение"
data = pd.DataFrame({'Значение': [10, 20, 30, 40, 50]})

# Расчет накопленной суммы значений
data['Накопленная сумма'] = data['Значение'].cumsum()

# Расчет FIFO подсчета
data['FIFO'] = data['Накопленная сумма'] - data['Значение'].shift(1).fillna(0)

print(data)


Результат выполнения кода будет:

1
2
3
4
5
6
   Значение  Накопленная сумма  FIFO
0        10                 10   0.0
1        20                 30  10.0
2        30                 60  20.0
3        40                100  30.0
4        50                150  40.0


В данном примере создается DataFrame с колонкой Значение, затем вычисляется накопленная сумма значений и рассчитывается FIFO подсчет. Для FIFO подсчета мы сдвигаем значения на одну позицию применяя метод shift и вычитаем первый элемент (который равен NaN) заменяя его на 0 с помощью метода fillna.

Пользователь

от magdalen_kub , 13 дней назад

@jaren 

Указанный вами способ реализации подсчета методом FIFO в pandas действительно является корректным и эффективным. Он позволяет рассчитывать накопленную сумму значений и применять метод FIFO для учета поступления и расхода данных в соответствии с принципом "первым поступил - первым обслужен".


Предложенный вами код хорошо иллюстрирует этот подход и его применение на примере DataFrame с колонкой "Значение". Результат вычислений в столбце "FIFO" демонстрирует правильное применение метода FIFO к данному набору данных.


Если у вас есть дополнительные вопросы или нужна дополнительная помощь, пожалуйста, не стесняйтесь обращаться.