Как добавлять в список элемент из DataFrame при условии, что сумма элементов из соседнего столбца больше определенного значения?

Есть DataFrame, например:

    geo distance
0   0.000001    0.11132
1   0.000002    0.11132
2   0.000003    0.11132
3   0.000004    0.11132
4   0.000005    0.11132
5   0.000006    0.11132
6   0.000007    0.11132
7   0.000008    0.11132
8   0.000009    0.11132
9   0.000010    0.11132
10  0.000011    0.11132
11  0.000012    0.11132
12  0.000013    0.11132
13  0.000014    0.11132
14  0.000015    0.11132
15  0.000016    0.11132
16  0.000017    0.11132
17  0.000018    0.11132
18  0.000019    0.11132
19  0.000020    0.11132

Мне надо создать алгоритм, который будет проходится по столбцу distance и считать сумму элементов.
Как только сумма превышает значение 1, мы записываем в новый список значение в столбце geo, на котором отчет начинался и на котором было это превышение, а так же сумму элементов. Далее, алгоритм повторяется (считаем сумму с элемента следующего после элемента, на котором было превышение).

Т. е. результат должен быть таким:

[
[0.000001, 0.000009, 1.00188],
[0.0000010, 0.000018, 1.00188],
....

]

Как можно это сделать?


Ответы (1 шт):

Автор решения: MaxU

Попробуйте так:

funcs = {
    "geo_first": ("geo", "first"), 
    "geo_last": ("geo", "last"), 
    "total_dist": ("distance", "sum")
}
res = (df
       .groupby(df.distance.cumsum().astype("int").shift().fillna(0))
       .agg(**funcs))

результат:

In [85]: res
Out[85]:
          geo_first  geo_last  total_dist
distance
0.0        0.000001  0.000009     1.00188
1.0        0.000010  0.000018     1.00188
2.0        0.000019  0.000020     0.22264

In [86]: res.to_numpy().tolist()
Out[86]:
[[1e-06, 9e-06, 1.0018799999999999],
 [1e-05, 1.8e-05, 1.0018799999999999],
 [1.9e-05, 2e-05, 0.22264]]
→ Ссылка