如何计算日内供应量

2024-06-28 11:29:29 发布

您现在位置:Python中文网/ 问答频道 /正文

我有列:ID,供应量,天数。你知道吗

对于供应计数从第1天到第60天大于等于100的ID,我想给它赋值1;否则为0。你知道吗

天数范围(-30100)

每个身份证上都有一行他拿到的记录供应.egID(1),供给计数(10),第(-5)天。你知道吗

我尝试的是:

df.loc[(0<df.days)&(df.days<=60)]

groupby('id').sum()

np.where((supply counts>100) , '1', '0')

问题是,如果任何一个id从第0天到第60天都没有记录,这个id就会丢失。你知道吗

数据样本。你知道吗

  id    supply  days
    1   15   -10
    1   20    5
    1   325   15
    2   10    -20
    2   50    10
    3   20    -30






id  y            
1   1
2   0

Tags: iddf记录daysloc计数sumgroupby
2条回答

首先按^{}筛选,然后仅为supply列聚合sum,由于可能会筛选出一些id值,所以按原始列的^{}值添加^{}。将Series转换为DataFrame的最后一个^{},并为提取supply添加新的y列和^{}

df1 = df[(df.days > 0)&(df.days<=60)]
df2=df1.groupby('id')['supply'].sum().reindex(df['id'].unique(), fill_value=-1).reset_index()
df2['y'] = np.where(df2.pop('supply') > 100, 1, 0)
print (df2)
   id   y
0   1   1
1   2   0
2   3   0

编辑:如果需要删除筛选出id行:

df1 = df[(df.days > 0)&(df.days<=60)]
df2=df1.groupby('id', as_index=False)['supply'].sum()
df2['y'] = np.where(df2.pop('supply') > 100, 1, 0)
print (df2)
   id  y
0   1  1
1   2  0

替代解决方案:

df2 = (df.query("0 < days <=60") 
         .groupby('id')['supply'].sum()
         .reindex(df['id'].unique(), fill_value=-1)
         .rename('y')
         .gt(100)
         .astype(int)
         .reset_index()
       )
print (df2)
   id  y
0   1  1
1   2  0
2   3  

df2 = (df.query("0 < days <=60") 
         .groupby('id')['supply'].sum()
         .rename('y')
         .gt(100)
         .astype(int)
         .reset_index()
       )
print (df2)
   id  y
0   1  1
1   2  0

我的理解是,也许这就是你需要的。你知道吗

s = (df.Days>0) & (df.Days<=60)
df['ID_new']= np.where ((s) & (df.supply_counts>=100), 1,0)

输入

   ID   supply_counts   Days
0   1   135             -15
1   1   70               67
2   1   90               38
3   1   80               49
4   1   68               71
5   2   116              85
6   1   81               91
7   2   62               15
8   1   112               1 
9   1   115               65
10  2   87               51
11  1   105              -9
12  1   107               2
13  2   66               79
14  2   92               46

输出


    ID  supply_counts   Days    ID_new
0   1   135             -15     0
1   1   70               67     0
2   1   90               38     0
3   1   80               49     0
4   1   68               71     0
5   2   116              85     0
6   1   81               91     0
7   2   62               15     0
8   1   112               1     1
9   1   115               65    0
10  2   87               51     0
11  1   105              -9     0
12  1   107               2     1
13  2   66               79     0
14  2   92               46     0

如果每个id的总和需要为1,如果sum of supply计数大于100,则下面的代码将起作用。你知道吗

df2 = df.groupby('id').sum().reset_index()
s = (df2.days>0) & (df2.days<=60)
df2['y']= np.where ((s) & (df2.supply>=100), 1,0)
df2[['id','y']]

输出

   id   y
0   1   1
1   2   0
2   3   0

相关问题 更多 >