我有一个数据框:
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
我想在数据框personal_count中生成另一列,该列将使用b_count的值(即148)创建,以使计数的60%位于最近10天,其余40%位于其余天。例如-这里date_1被重复30次,将148划分为30个条目,以使计数的60%位于date_2的最后10个日期中(在我们的情况下为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()
一些值丢失了,由于四舍五入的原因,这是合理的。
我的问题在这里:
我不想在生成personal_count时丢失b_count。
有什么办法可以确保在此相同。否则,我想将缺少的值分配给date_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
但是,如果您将personal_count相加,则总和为147,而不是148。我想将缺失值分配给日期的最后一个条目。请注意,数据框具有许多Date_1。我只分享了一个约会。