Как рассчитать формулу отношения на основе некоторых условий в кадре данных панд - PullRequest
0 голосов
/ 13 июня 2018

У меня есть фрейм данных, мой фрейм данных такой: кроме последнего столбца там нет.Я имею в виду, что у меня нет столбца формулы, и здесь моя цель - вычислить этот столбец.

, но как он был рассчитан?

формула для последнего столбца: для каждого пациентаNumber, числоиз Да / общее количество вопросов, на которые ответил пациент.

, например, для patient number one: есть 1 Yes and 2 No, поэтому для второго пациента было 1/3

в год 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, поэтому в этом случае ту же формулу следует умножить на 2/2

1 Ответ

0 голосов
/ 13 июня 2018

попробуйте это,

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 

Объяснение: Попробуйте получить помощь от определенного пользователем метода.эта функция подсчитает вам число да и общую запись.тогда вы можете решить это как хотите.Формула столбца - это желаемый результат.Если вы хотите, чтобы он оценил, я добавил формула_applied.

...