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

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

Сообщение Anonymous »

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

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

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

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

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

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

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

Подробнее здесь: https://stackoverflow.com/questions/790 ... -dataframe
Реклама
Ответить Пред. темаСлед. тема

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

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

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

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

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

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