Рассчитать месяцы покрытия на основе нескольких параметров в Pandas - PullRequest
1 голос
/ 26 сентября 2019

Мне нужно отметить месяц с 1, когда пациент был покрыт каким-либо продуктом.Одна доза обеспечивает покрытие на 1 месяц.Также я хотел бы видеть пробелы в освещении.

Еще одна деталь - количество может также влиять на месяцы покрытия.Допустим, количество равно 2, тогда пациент покрывается в течение следующих 2 месяцев.

Сейчас я использую df.loc, который работает с первой дозой, но не могу понять, как рассчитать эти пробелы вохват.


df = pd.DataFrame({'patient':['1','2','3','4','5','6','7'], 'dose1':['A','B','B','A','C','C','C'],
                  'qty1':[1,2,1,4,1,3,4],
                  'days_since_last_dose1':[0,0,0,0,0,0,0],
                  'dose2':['B','A','B','A','C','B','C'],
                  'qty2':[1,2,1,4,1,3,4],
                  'days_since_last_dose2':[23,56,120,43,30,15,60],
                  'dose3':['B','B','B','A','A','C','B'],
                  'qty3':[3,1,1,2,1,3,4],
                  'days_since_last_dose3':[44,22,67,150,76,32,21], 'M1':[0,0,0,0,0,0,0], 'M2':[0,0,0,0,0,0,0], 'M3':[0,0,0,0,0,0,0], 'M4':[0,0,0,0,0,0,0], 'M5':[0,0,0,0,0,0,0], 'M6':[0,0,0,0,0,0,0], 'M7':[0,0,0,0,0,0,0], 'M8':[0,0,0,0,0,0,0], 'M9':[0,0,0,0,0,0,0], 'M10':[0,0,0,0,0,0,0], 'M11':[0,0,0,0,0,0,0], 'M12':[0,0,0,0,0,0,0]})

prod_1 = ['A']
prod_2 = ['B']
prod_3 = ['C']

df.loc[(df['dose1'].isin(prod_1)) & (df['qty']==1), ('MONTH1')] = 1

Например, пациент получил Дозу_1 (кол-во = 1), которая покрывала его на 30 дней, и возвращается на Дозу_2 (кол-во = 2) спустя 120 дней.Теперь это должно быть представлено как:

M1 = 1, M2 = 0, M3 = 0, M4 = 0, M5 = 1 (пациент вернулся через 120 дней после первой дозы + двойное количество), M6 = 1, M7 = 0, M8 = 0 и т. Д.

1 Ответ

0 голосов
/ 27 сентября 2019

добро пожаловать в stackoverflow,

for i in range(len(df['patient'])): #for loop to separate each patient in a separate dict
    newdict={}
    for k,v in df.items():
        newdict[str(k)]=v[i]
    data.append(newdict)

for log in data: # for loop to add up the total quantities and assign months to 1 
    for dose in range(log['qty1']+log['qty2']+log['qty3']):
        log[f'M{dose+1}']=1





df = pd.DataFrame.from_dict(data)
df = df.to_csv('doses.csv')

Мне понравилось выяснять это.

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

Редактировать:

for i in range(len(df['patient'])):
    newdict={}
    for k,v in df.items():
        newdict[str(k)]=v[i]
    data.append(newdict)

for log in data:
    for dose in range(1,log['qty1']+1):
        log[f'M{dose}']=1
    gap = 1 + round((log['days_since_last_dose2']/30)+0.5)
    for dose in range(gap,(gap+log['qty2'])):
        log[f'M{dose}']+=1
    gap1 = 1 + round((log['days_since_last_dose3']/30)+0.5)+gap
    for dose in range(gap1,gap1+log['qty3']):
        log[f'M{dose}']+=1

ОК, поэтому я нашел алгоритм для расчета покрытия, 2 указывает на перекрытие в покрытии.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...