【发布时间】:2018-11-24 12:13:38
【问题描述】:
所以,这是我的数据框。
PatientNumber QT Answer Answerdate DiagnosisDate
1 1 transferring No 2017-03-03 2018-05-03
2 1 preparing food No 2017-03-03 2018-05-03
3 1 medications Yes 2017-03-03 2018-05-03
4 2 transferring No 2011-05-10 2012-05-04
5 2 preparing food No 2011-05-10 2012-05-04
6 2 medications No 2011-05-10 2012-05-04
7 2 transferring Yes 2011-15-03 2012-05-04
8 2 preparing food Yes 2011-15-03 2012-05-04
9 2 medications No 2011-15-03 2012-05-04
10 2 transferring Yes 2010-15-12 2012-05-04
11 2 preparing food No 2010-15-12 2012-05-04
12 2 medications No 2010-15-12 2012-05-04
13 2 transferring Yes 2009-10-10 2012-05-04
14 2 preparing food No 2009-10-10 2012-05-04
15 2 medications No 2009-10-10 2012-05-04
16 3 medications No 2008-10-10 2010-07-04
我刚刚找到一个与我的问题here 相关的链接,它没有得到任何正确答案。
一些解释: 对于每个患者编号,diagnosisDate 是唯一的。Answer Date 是他们填写问题的数次。
但我想做什么:?
我的目标是从DiagnosisDateevery six month 返回,并将其标记到as the first 6 month record 的列上。在列中我们应该保存哪个六个月(前六个月,第二个月,第三个月,...)。
例如对于这个数据框,DiagnosisDate 的 PatientNumber=1 是 2018-05-03 所以它应该从那个时候返回 6 month。 the first 6 month 是2017-27-11 作为最大的AnswerDate 不属于该日期,它不会被标记为first six month。
如果第一个answerdate 在此日期以内,则将其标记为first 6 month。
所以这里PatientNumber=1 在6month 列中得到3,因为当我们从diagnosisdate 6 month 返回时,answerdate 会在一段时间后落在6 month 之下。
所以这个数据框的输出将是:
PatientNumber QT Answer Answerdate DiagnosisDate 6month
1 1 transferring No 2017-03-03 2018-05-03 3
2 1 preparing food No 2017-03-03 2018-05-03 3
3 1 medications Yes 2017-03-03 2018-05-03 3
4 2 transferring No 2011-05-10 2012-05-04 1
5 2 preparing food No 2011-05-10 2012-05-04 1
6 2 medications No 2011-05-10 2012-05-04 1
7 2 transferring Yes 2011-15-04 2012-05-04 2
8 2 preparing food Yes 2011-15-04 2012-05-04 2
9 2 medications No 2011-15-04 2012-05-04 2
10 2 transferring Yes 2010-15-12 2012-05-04 3
11 2 preparing food No 2010-15-12 2012-05-04 3
12 2 medications No 2010-15-12 2012-05-04 3
13 2 transferring Yes 2009-10-10 2012-05-04 5
14 2 preparing food No 2009-10-10 2012-05-04 5
15 2 medications No 2009-10-10 2012-05-04 5
16 3 medications No 2008-10-10 2010-07-04 4
对于 PatientNumber =2,它将从 DiagnosisDate =2012-05-04 开始并返回 6 个月。它将是 2011-11-04。
我应用了这个:
data['6month'] = pd.date_range(end=data['diagnosisdate'],periods=2, freq='6M',closed='left')
首先它只关心月份,所以大致计算不准确, 而且我找不到提及 6 个月数的方法,就像我在上面的数据框中提到的一样(在 6 月列中,我的意思是 1 2,...而不是日期。
因此根据数据,我们可以在6month列中看到1...10的数字(考虑到诊断前5年)
说来话长。希望有人能花点时间:)。
我还需要保持整个列的结果不变。
【问题讨论】:
-
嗨,Saria,请与我们分享您的
df.to_dict(),以便我们进行复制。 -
你的意思是说
6month应该是diagnosis_date- 6个月? -
@user32185 感谢您的提问,但是您的意思是什么,因为我已经分享了一个数据框样本,我认为这已经足够了。请让我知道还需要什么?
-
@ifly6 感谢您的提问。我的目标是每 6 个月分析一次患者的回答。所以从诊断日期开始,我必须每 6 个月考虑他们的答案。稍后我将对每 6 个月进行一些分析。请让我知道哪个部分仍然模棱两可。谢谢
-
@ifly6 我添加了一些说明,并解释了输出中的患者编号 1 的数字。希望它更清楚:)
标签: pandas dataframe group-by time-series data-analysis