#python #pandas #dataframe #sum #iteration
Вопрос:
A = pd.DataFrame({"type":['a','b','c', 'd','e'], "cost basis":[50, 40, 30, 20, 10], "value":[5, 25, 40, 10, 20]})
Я ищу, чтобы выполнить итерацию по столбцу «значение» до определенного значения или суммы в порядке убывания. Допустим, 50, тогда как если следующее число превысит это значение, то итерация на этом остановится.
Комментарии:
1. Каков ваш ожидаемый результат от данного кадра данных?
2. Для этого примера давайте просто скажем 50. Таким образом, повторяя столбец значения в порядке убывания до 50, затем каждая из этих строк в кадре данных до этого значения будет добавлена в новый кадр данных. Это для проекта по бухгалтерскому учету, над которым я работаю, поэтому я фильтрую набор данных для продажи конкретных налоговых лотов.
Ответ №1:
Не уверен, что вы этого хотите, но если я правильно понимаю:
Попробуйте через cumsum()
:
out=A.loc[A['value'].cumsum().le(50)]
или
Если хотите в порядке убывания, то используйте sort_values()
cumsum()
:
out=A.loc[A.sort_values('value',ascending=False,ignore_index=True)['value'].cumsum().le(50)]
Ответ №2:
Этого можно достичь с помощью двух функций: cumsum
и argmax
import numpy as np
import pandas as pd
A = pd.DataFrame({"type":['a','b','c', 'd','e'], "cost basis":[50, 40, 30, 20, 10], "value":[5, 25, 40, 10, 20]})
# Cummulated sum of array A
acumsum = np.cumsum(A.value.values)
# Determine the first index where the value is greater than 50:
idx = np.argmax(acumsum > 50)
print(idx)