У меня есть следующие значения df
,
group_id code amount date
1 100 20 2017-10-01
1 100 25 2017-10-02
1 100 40 2017-10-03
1 100 25 2017-10-03
2 101 5 2017-11-01
2 102 15 2017-10-15
2 103 20 2017-11-05
. Мне нравится groupby
group_id
, а затем вычисляются баллы для каждой группы на основе следующих функций:
- если
code
значения одинаковы в группе, в противном случае - 0 и 10; - , если
amount
сумма> 100, в противном случае - 20 и 0; sort_values
на date
в порядке убывания и суммируйте различия между датами, если сумма <5, оценка 30, в противном случае 0. </li>
, поэтому результат df
выглядит так:
group_id code amount date score
1 100 20 2017-10-01 50
1 100 25 2017-10-02 50
1 100 40 2017-10-03 50
1 100 25 2017-10-03 50
2 101 5 2017-11-01 10
2 102 15 2017-10-15 10
2 103 20 2017-11-05 10
Вот функции, которые соответствуют каждой функции выше:
def amount_score(df, amount_col, thold=100):
if df[amount_col].sum() > thold:
return 20
else:
return 0
def col_uniq_score(df, col_name):
if df[col_name].nunique() == 1:
return 0
else:
return 10
def date_diff_score(df, col_name):
df.sort_values(by=[col_name], ascending=False, inplace=True)
if df[col_name].diff().dropna().sum() / np.timedelta64(1, 'D') < 5:
return score + 30
else:
return score
Мне интересно, как применить эти функции к каждой группе и вычислить сумму всех функций, чтобы получить score
.