#python #python-3.x #pandas
#python #python-3.x #панды
Вопрос:
Если у меня есть df, как показано ниже, как:
State | x_date | y_date | z_date | amount | date_status
NY 2019-10-24 NaN NaN $400 2019-05-01
NJ 2019-07-24 2019-10-24 2019-10-20 $0 2019-05-01
CA NaN 2019-01-24 NaN $320 2019-05-01
WA NaN NaN NaN $10 2019-05-01
WA 2018-07-10 NaN NaN $100 2019-05-01
WA 2018-09-10 NaN 2019-10-10 $30 2019-05-01
Как я могу сгруппировать по столбцу состояния и получить сумму столбца суммы / сумму суммы всех строк в группировках состояний?
Числитель должен быть сгруппирован по столбцам состояния сумма столбца суммы, только если КАКАЯ-ЛИБО из дат в x_date, y_date или z_date позже или после даты в столбце date_status
ожидаемый результат:
State | pct
NY 1
NJ 0
CA 0
WA .21
где WA равно (30/140)
Спасибо!
Ответ №1:
Довольно просто:
filtered_df = df[
(df['x_date'] >= df['date_status'])
| (df['y_date'] >= df['date_status'])
| (df['z_date'] >= df['date_status'])
]
result = (
filtered_df.groupby('State').amount.sum()
/ df.groupby('State').amount.sum()
).fillna(0)
Результат:
State
CA 0.000000
NJ 0.000000
NY 1.000000
WA 0.214286
Name: amount, dtype: float64