Среднее значение группового преобразования Pandas с датой до текущей строки для огромного кадра данных ⇐ Python

Программы на Python
Anonymous
Среднее значение группового преобразования Pandas с датой до текущей строки для огромного кадра данных

Сообщение Anonymous »

У меня есть фрейм данных Pandas, который выглядит так:

Код: Выделить всё

df = pd.DataFrame([['John', '1/1/2017','10'],
['John', '2/2/2017','15'],
['John', '2/2/2017','20'],
['John', '3/3/2017','30'],
['Sue', '1/1/2017','10'],
['Sue', '2/2/2017','15'],
['Sue', '3/2/2017','20'],
['Sue', '3/3/2017','7'],
['Sue', '4/4/2017','20']],
columns=['Customer', 'Deposit_Date','DPD'])
И я хочу создать новую строку под названием «Предыдущеесреднее». В этом столбце указано среднее значение DPD для этого клиента с начала года. т. е. включает все DPD до строк, соответствующих текущей дате депозита, но не включая их. Если предыдущих записей не существовало, то это значение равно нулю или 0.
Итак, желаемый результат выглядит так:

Код: Выделить всё

  Customer Deposit_Date  DPD  PreviousMean
0     John   2017-01-01   10           NaN
1     John   2017-02-02   15          10.0
2     John   2017-02-02   20          10.0
3     John   2017-03-03   30          15.0
4      Sue   2017-01-01   10           NaN
5      Sue   2017-02-02   15          10.0
6      Sue   2017-03-02   20          12.5
7      Sue   2017-03-03    7          15.0
8      Sue   2017-04-04   20          13.0
И после некоторых исследований на сайте и в Интернете вот одно решение:

Код: Выделить всё

df['PreviousMean'] = df.apply(
lambda x: df[(df.Customer == x.Customer) & (df.Deposit_Date < x.Deposit_Date)].DPD.mean(),
axis=1)
И это прекрасно работает. Однако мой фактический фрейм данных намного больше (~ 1 миллион строк), а приведенный выше код работает очень медленно. Есть ли лучший способ сделать это? Спасибо

Подробнее здесь: https://stackoverflow.com/questions/790 ... ge-datafra

Вернуться в «Python»