У меня есть фрейм данных:
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 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['ratio_count'] = 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','ratio_count']).apply(add_series)
Я думал, что у меня это есть, но вот в чем проблема:
Некоторые значения отсутствуют, и это оправдано из-за округления.
Мой вопрослежит здесь:
Я не хочу получать потерю b_count при генерации индивидуального_счета.
Я сделал это:
df3.groupby('Date_1')['individual_count'].sum()
и обнаружил, что счет нето же самое при суммировании.
Я хочу найти пропущенный счетчик для каждой даты и добавить его к последней записи для этой конкретной даты_1 внабор данных. Например - я получаю 147 как b_count после добавления на 01/09/2019, я хочу добавить 1 киндивидуальный_счет последней записи для его создания 148.
Может ли кто-нибудь помочь с тем же.
Спасибо