У меня есть фрейм данных:
DF
Date_1 Date_2 b_count
01/09/2019 02/08/2019 148
01/09/2019 03/08/2019 148
01/09/2019 04/08/2019 148
01/09/2019 05/08/2019 148
01/09/2019 06/08/2019 148
01/09/2019 07/08/2019 148
01/09/2019 08/08/2019 148
01/09/2019 09/08/2019 148
01/09/2019 10/08/2019 148
01/09/2019 11/08/2019 148
01/09/2019 12/08/2019 148
01/09/2019 13/08/2019 148
01/09/2019 14/08/2019 148
01/09/2019 15/08/2019 148
01/09/2019 16/08/2019 148
01/09/2019 17/08/2019 148
01/09/2019 18/08/2019 148
01/09/2019 19/08/2019 148
01/09/2019 20/08/2019 148
01/09/2019 21/08/2019 148
01/09/2019 22/08/2019 148
01/09/2019 23/08/2019 148
01/09/2019 24/08/2019 148
01/09/2019 25/08/2019 148
01/09/2019 26/08/2019 148
01/09/2019 27/08/2019 148
01/09/2019 28/08/2019 148
01/09/2019 29/08/2019 148
01/09/2019 30/08/2019 148
01/09/2019 31/08/2019 148
Я хочу создать еще один столбец в dataframe Individual_count, который должен быть создан со значением b_count, т.е. 148 таким, что 60% отсчет за последние 10 дней, остальные 40% за оставшиеся дни. например - здесь date_1 повторяется 30 раз, 148 следует разделить на 30 записей, так что 60% подсчета приходится на последние 10 дат date_2 (в нашем случае с 22/08/2019 по 31/08/2019.
Я начал со следующего:
count = 30
arr = []
for row in df.iterrows():
if count == 0:
count = 30
continue
if count >10:
arr.append(round(0.4 * row.b_Count))
count = count - 1
if count <=10:
arr.append(round(0.6 * row.b_Count))
count = count - 1
df['new'] = arr
Новый столбец назначил отношение b_count к 60-40.
Теперь, чтобы достичь возрастающей тенденции:
def add_series(grp):
n_rows = grp.shape[0]
val = grp['new'].min()
s = np.exp(np.linspace(0,1,n_rows))
s = np.round((s * val)/ np.sum(s))
grp['individual_count'] = s
return grp
df3 = df.groupby(['Date_1','new']).apply(add_series)
Это работает так, как я хотел, но с некоторыми ошибками:
, если я это сделаю:
df3.groupby('Flight_Date')['individual_count'].sum()
Некоторые значения отсутствуют, и это оправданоиз-за округления.
Мой вопрос лежит здесь:
Я не хочу получать потерю b_count при генерации индивидуального_счета.
Есть ли способ, которым яможет обеспечить то же самое здесь. Или же, я хотел присвоить отсутствующее значение последней записи для даты_1 (т. е. 30-й записи)
Может ли кто-нибудь помочь с тем же.
Спасибо
РЕДАКТИРОВАТЬ
Вывод, который я получаю:
Date_1 b_Count individual_count
01/09/2019 148 2
01/09/2019 148 2
01/09/2019 148 2
01/09/2019 148 2
01/09/2019 148 2
01/09/2019 148 2
01/09/2019 148 2
01/09/2019 148 2
01/09/2019 148 3
01/09/2019 148 3
01/09/2019 148 3
01/09/2019 148 3
01/09/2019 148 3
01/09/2019 148 3
01/09/2019 148 4
01/09/2019 148 4
01/09/2019 148 4
01/09/2019 148 4
01/09/2019 148 4
01/09/2019 148 5
01/09/2019 148 5
01/09/2019 148 6
01/09/2019 148 6
01/09/2019 148 7
01/09/2019 148 8
01/09/2019 148 9
01/09/2019 148 10
01/09/2019 148 11
01/09/2019 148 12
01/09/2019 148 14
Однако, если вы суммируете Individual_count, сумма будет 147, а не 148. Я хочу присвоить отсутствующее значение последней записи даты. Обратите внимание, что в датафрейме много Date_1. Я поделился только на одну дату.