Код: Выделить всё
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'])
Итак, желаемый результат выглядит так:
Код: Выделить всё
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)
Я уже задавал аналогичный вопрос раньше: среднее значение группового преобразования Pandas с датой перед текущей строкой для огромного кадра данных
за исключением того, что на этот раз группировка выполняется по двум столбцам, и, следовательно, решения не работают, и мне не удалось попытаться обобщить это.
Есть ли что-нибудь лучше? способ это сделать? Спасибо
Подробнее здесь: https://stackoverflow.com/questions/790 ... -dataframe