我有一个数据框,我的数据框是这样的: 除了最后一列不存在。 我的意思是我没有公式栏,这里的目的是计算该栏目。
但是如何计算?
最后一列的公式是:对于每个患者数, 患者已回答是/总问题数。
例如patient number one
:1 Yes and 2 No
,1/3
对于患者2,在2006, month 10
年,我们看不到Yes
这三个问题是否定的,因此已计算0
PatientNumber QT Answer Answerdate year month dayofyear count formula
1 1 transferring No 2017-03-03 2017 3 62 2.0 (1/3)
2 1 preparing food No 2017-03-03 2017 3 62 2.0 (1/3)
3 1 medications Yes 2017-03-03 2017 3 62 1.0 (1/3)
4 2 transferring No 2006-10-05 2006 10 275 3.0 0
5 2 preparing food No 2006-10-05 2006 10 275 3.0 0
6 2 medications No 2006-10-05 2006 10 275 3.0 0
7 2 transferring Yes 2007-4-15 2007 4 105 2.0 2/3
8 2 preparing food Yes 2007-4-15 2007 4 105 2.0 2/3
9 2 medications No 2007-4-15 2007 4 105 1.0 2/3
10 2 transferring Yes 2007-12-15 2007 12 345 1.0 1/3
11 2 preparing food No 2007-12-15 2007 12 345 2.0 1/3
12 2 medications No 2007-12-15 2007 12 345 2.0 1/3
13 2 transferring Yes 2008-10-10 2008 10 280 1.0 (1/3)
14 2 preparing food No 2008-10-10 2008 10 280 2.0 (1/3)
15 2 medications No 2008-10-10 2008 10 280 2.0 (1/3)
16 3 medications No 2008-10-10 2008 12 280 …… ………..
更新1
此外,如果公式有所改变,该怎么办:
如果患者访问医院once a year
,则相同的公式为2,例如,对于2017
年,只有一个月与该患者相关,因此这意味着患者在这一年中只达到过一次。在这种情况下,上面的公式是2乘法。
(why because my window should be every 6 month, so if the patient has not come every 6 month I am assuming the same record is happening)
但如果一名患者在一年内有多条记录,则应为multiplied 2/the number of record on that year
。
例如,在2007
年,患者在2 times
进入医院month 4
,在month 12
进入另一个医院,因此在这种情况下,相同的公式应乘以{{1} }
答案 0 :(得分:1)
试试这个,
def func(x):
x['yes']= len(x[x['Answer']=='Yes'])
x['all']= len(x)
return x
df=df.groupby(['PatientNumber','Answerdate']).apply(func)
df['formula_applied']=df['yes']/df['all']
df['formula']=(df['yes']).astype(str)+'/'+(df['all']).astype(str)
print df
输出:
PatientNumber QT Answer Answerdate year month dayofyear \
0 1 transferring No 2017-03-03 2017 3 62
1 1 preparing food No 2017-03-03 2017 3 62
2 1 medications Yes 2017-03-03 2017 3 62
3 2 transferring No 2006-10-05 2006 10 275
4 2 preparing food No 2006-10-05 2006 10 275
5 2 medications No 2006-10-05 2006 10 275
6 2 transferring Yes 2007-4-15 2007 4 105
7 2 preparing food Yes 2007-4-15 2007 4 105
8 2 medications No 2007-4-15 2007 4 105
9 2 transferring Yes 2007-12-15 2007 12 345
10 2 preparing food No 2007-12-15 2007 12 345
11 2 medications No 2007-12-15 2007 12 345
12 2 transferring Yes 2008-10-10 2008 10 280
13 2 preparing food No 2008-10-10 2008 10 280
14 2 medications No 2008-10-10 2008 10 280
count yes all formula_applied formula
0 2.0 1 3 0.333333 1/3
1 2.0 1 3 0.333333 1/3
2 1.0 1 3 0.333333 1/3
3 3.0 0 3 0.000000 0/3
4 3.0 0 3 0.000000 0/3
5 3.0 0 3 0.000000 0/3
6 2.0 2 3 0.666667 2/3
7 2.0 2 3 0.666667 2/3
8 1.0 2 3 0.666667 2/3
9 1.0 1 3 0.333333 1/3
10 2.0 1 3 0.333333 1/3
11 2.0 1 3 0.333333 1/3
12 1.0 1 3 0.333333 1/3
13 2.0 1 3 0.333333 1/3
14 2.0 1 3 0.333333 1/3
说明: 尝试从用户定义的方法获得帮助。此函数将计算您的是和总记录的数量。然后你可以按照自己的意愿解决它。列公式是您想要的结果。如果你想要评估我添加了formula_applied。