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

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

Сообщение 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
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

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

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

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