舍入列值的问题

我有一个数据框:

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。我只分享了一个约会。

wgq82265218 回答:舍入列值的问题

您算是尝试一下……

if df.groupby('Date_1')['individual_count'].sum().values != df.groupby('Date_1')['b_Count'].max().values:
     df.iloc[-1:,2] = df['individual_count'].iloc[-1:] + 1

它增加特定输出中的最后一项。但是,如果您使用不同的Date_1值,它将无法动态工作。也许您可以以某种方式扩展它。基本上,您必须将df.iloc[-1:,2]值的最后一项更改为Date_1

本文链接:https://www.f2er.com/3138415.html

大家都在问