我想看看每个成员是否对某种毒品上瘾,1代表上瘾,0代表其他。你知道吗
以下数据是每个会员的处方记录。每个成员在第0天都有该药物的处方记录。供应是指该药物的供应天数。你知道吗
id supply days
1 30 -200
1 30 0
1 100 183
1 80 250
2 5 0
2 5 10
3 5 0
3 30 100
3 30 150
3 30 200
3 30 280
3 50 310
对于赋值1或0的逻辑:
如果一个会员国在过去的90天内没有毒品,根据供应和天数,它将成为“幼稚状态”。如果在90天内不吸毒,这个成员可能会回到天真的状态。你知道吗
如果一个会员在“幼稚状态”后的3个月内手头上有超过162天的药物供应,他将有很高的成瘾风险。所以我们给这个成员赋值1。你知道吗
结果应该是
id y
1 1
2 0
3 0
我试过的是
#Create Z,Z is the number of each naive status.
z=[]
y=0
z.append(y)
for i in range(len(abc)-1):
if ((df.days[i+1]-df.days[i])>90)&((df.id[i+1]-df.id[i])==0):
y=y+1
z.append(y)
else:
if (df.id[i+1]-df.id[i])!=0:
y=0
z.append(y)
else:
if (df.id[i+1]-df.id[i])==0:
y=y
z.append(y)
df['z']=z
#groupby id and z . sum.
df2=df.groupby(['id','z']).sum()
#create y to assign value.
df2['y'] = np.where((df2.supply>=162) , 1, 0)
我的结果是
id supply days z
1 30 -200 0
1 30 0 1
1 100 183 2
1 80 250 2
2 5 0 0
2 5 10 0
3 30 0 0
3 30 100 1
3 30 150 1
3 30 200 1
3 30 280 1
3 30 310 1
supply_sum
id z
-------------
1 0 30
1 30
2 180
-----------
2 0 10
-----------
3 0 30
1 170
id z y
-------------------
1 0
1
2 1
-----------------
2 0 0
------------------
3 0
1 1
不起作用,因为我把每个z的供应量加起来。它应该只加上3个月的供应量(180天)基于每个天真的状态(z)。例如,id 3的y应该是0,因为在天真状态2(z=1)之后的3个月内,他只吃了120片<;162。但我的密码是170。你知道吗
看看这对你有用吗
输出
细节
使用
df_d=df.loc[(0<=df.days)&(df.days<=180)]
我们创建一个天在0&180之间的新df。你知道吗然后用
g=df_d.days.eq(0).cumsum()
我们创建一个系列,从每个零开始改变数字。你知道吗基本上你已经试过了。按
g
&;id
分组,并对供应计数求和。你知道吗相关问题 更多 >
编程相关推荐