Вычисление разницы в датах для строк данных панд с изменением базовых дат - PullRequest
0 голосов
/ 25 января 2019

Привет! Я использую разницу в дате как функцию машинного обучения, анализируя, как вес пациента менялся с течением времени.

enter image description here

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

s='17/6/2016'
s1='22/6/16'
a=pd.to_datetime(s,infer_datetime_format=True)
b=pd.to_datetime(s1,infer_datetime_format=True)
e=b.date()-a.date()
str(e)
str(e)[0:2]

Я думаю, что-то вроде этого, (но я не уверен, как именно это сделать):

def f(row):
    # some logic here 

    return val

df['Datediff'] = df.apply(f, axis=1)

Ответы [ 2 ]

0 голосов
/ 26 января 2019
df["Datediff"] = df.groupby("Name")["Date"].diff().fillna(0)/ np.timedelta64(1, 'D')
df["Datediff"]

0      0.0
1     12.0
2     14.0
3     66.0
4     23.0
5      0.0
6     10.0
7     15.0
8     14.0
9      0.0
10    14.0
Name: Datediff, dtype: float64
0 голосов
/ 25 января 2019

Вы можете использовать transform с first

 df['Datediff'] = df['Date'] - df1.groupby('Name')['Date'].transform('first')

Другим решением может быть использование cumsum

 df['Datediff'] = df.groupby('Name')['Date'].apply(lambda x:x.diff().cumsum().fillna(0))
...