У меня есть spark dataframe, который выглядит так:
import pandas as pd
dt = pd.DataFrame({'id': ['a','a','a','a','a','a','b','b','b','b'],
'delta': [1,2,3,4,5,6,7,8,9,10],
'pos': [2,0,0,1,2,1,2,0,0,1],
'index': [1,2,3,4,5,6,1,2,3,4]})
Я хотел бы суммировать delta
s от pos==2
до pos==1
, для всех раз, когда это происходит, by id
Итак, я хотел бы, чтобы столбец во фрейме данных spark выглядел так:
[6, 0, 0, 0, 4, 0, 24, 0, 0, 0]
Пояснение к результату:
- 6 -> для
id
'a'
, найдите первый pos==2
и просуммируйте все delta
до (не включая) следующего pos==1
, так что 1 + 2 + 3 = 6 - 0 этого нет в
pos==2
- 0 этого нет в
pos==2
- 0 этого нет в
pos==2
- 4 -> для
id
'a'
, найдите следующий pos==2
и просуммируйте все delta
до (не включая) следующего pos==1
, так что всего 4 - 21 -> для
id
'b'
, найдите первый pos==2
и просуммируйте все delta
до (не включая) следующего pos==1
, так что 7 + 8 + 9 = 24
Любые идеи как я могу сделать это эффективно в pyspark?
EDIT
Dataframe упорядочен по index
и id