Я могу вычислить простое значение с помощью
def get_win_prop(df, d) -> float:
mask = (df['created_on'] < d)
prop = df[mask].won.mean()
return(prop)
get_win_prop(d, '2022-10-25')
Я не получаю ошибок, когда пытаюсь использовать эту функцию с pd.assign(), но все значения в конечном итоге оказываются NaN:
d.assign(rolling_won_prop = lambda x: get_win_prop(x, x.created_on))

Чего мне не хватает? Я бы предположил, что эффект get_win_prop() — это то, что мне нужно. Есть ли более эффективный способ сделать это в пандах? Обратите внимание: ниже я предоставил образец данных, но перед вычислением значения get_win_prop() мне нужно будет сгруппировать их по столбцу идентификатора клиента.
Пример данных
import pandas as pd
from pandas import Timestamp
d = pd.DataFrame({'created_on': [Timestamp('2022-09-22 00:00:00'), Timestamp('2022-10-14 00:00:00'),Timestamp('2022-10-19 00:00:00'),Timestamp('2022-10-25 00:00:00'),Timestamp('2022-11-02 00:00:00'),
Timestamp('2022-11-04 00:00:00'),Timestamp('2022-11-16 00:00:00'),Timestamp('2022-11-28 00:00:00'),Timestamp('2022-11-28 00:00:00'),Timestamp('2022-12-07 00:00:00'),
Timestamp('2022-12-21 00:00:00'),Timestamp('2022-12-21 00:00:00'),Timestamp('2022-12-21 00:00:00'),Timestamp('2022-12-21 00:00:00')],
'n_lines': [7, 3, 7, 6, 6, 4, 5, 3, 10, 3, 6, 6, 9, 6],
'n_pieces': [606, 202, 706, 765, 255, 803, 1004, 2702, 1909, 546, 555, 555, 558,555],
'quote_total': [1780.4299999999998, 3575.4600000000005, 11762.079999999994, 6725.160000000002, 995.9300000000001, 1644.2100000000003, 2620.2299999999996,
8082.090000000001, 5302.320000000001, 1959.7599999999998, 8734.67, 9792.3, 0.0, 9720.71],
'won': [1, 0, 1, 1, 0, 1, 0, 0, 1, 1, 0, 0, 0, 0]})
Подробнее здесь: https://stackoverflow.com/questions/791 ... n-row-r-wi