如何根据熊猫数据框中的某些条件计算比率公式

时间:2018-06-13 04:01:08

标签: pandas dataframe machine-learning group-by data-analysis

我有一个数据框,我的数据框是这样的: 除了最后一列不存在。 我的意思是我没有公式栏,这里的目的是计算该栏目。

但是如何计算?

最后一列的公式是:对于每个患者数, 患者已回答是/总问题数。

例如patient number one1 Yes and 2 No1/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} }

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。