Python熊猫:如何获取具有条件的先前日期
我有以下列的数据集: 遭遇 FormName 类型属性 在FormName中,我有以下表格: 基线 随访 以下是一个示例数据:Python熊猫:如何获取具有条件的先前日期,python,pandas,Python,Pandas,我有以下列的数据集: 遭遇 FormName 类型属性 在FormName中,我有以下表格: 基线 随访 以下是一个示例数据: encounterDate, FormName, PersonID 2019-01-12, Baseline, 01 2020-01-01, Baseline, 01 2019-04-12, Follow-up, 01 2019-13-12, Follow-up, 01 2020-15-01, Follow-up, 01 我想要下表: encounterDate, F
encounterDate, FormName, PersonID
2019-01-12, Baseline, 01
2020-01-01, Baseline, 01
2019-04-12, Follow-up, 01
2019-13-12, Follow-up, 01
2020-15-01, Follow-up, 01
我想要下表:
encounterDate, FormName, PersonID, Previous_date
2019-01-12, Baseline, 01, null
2020-01-01, Baseline, 01, 2019-01-12
2019-04-12, Follow-up, 01, null
2019-13-12, Follow-up, 01, 2019-04-12
2020-15-01, Follow-up, 01, 2019-13-12
如何用Python编写此代码
此外,我还想对他们进行排名:
encounterDate, FormName, PersonID, Previous_date, Rank
2019-01-12, Baseline, 01, null, 1
2020-01-01, Baseline, 01, 2019-01-12, 2
2019-04-12, Follow-up, 01, null, 1
2019-13-12, Follow-up, 01, 2019-04-12, 2
2020-15-01, Follow-up, 01, 2019-13-12, 3
下面是我在SQL中的工作代码
select encounter_date,FormName,PersonID
, date((select max(enc.encounter_datetime)
from encounter enc
where enc.patient_id=e.patient_id
and enc.encounter_type=e.encounter_type
and date(e.encounter_datetime)>date(enc.encounter_datetime))) previous_date
from encounter e
先谢谢你
John您好,您可以使用下面的换档功能进行换档
od=pd.DataFrame([['2019-01-12','Baseline',"01"],["2019-01-12","Baseline","01"]],
columns=["encounterDate", "FormName", "PersonID"])
od['Previous_date']=od.shift(1)['encounterDate']
这对熊猫来说是相当直接的 看起来您需要同时按PersonID和FormName进行分组,以获得正确的分组。在这些组中,您需要更改遭遇日期,并且需要相同的累计计数 cumcount从零开始,因此您可能希望将1添加到秩列以获得所需的输出
import pandas as pd
df = pd.DataFrame({
'encounterDate': ['2019-01-12','2020-01-01','2019-04-12','2019-13-12','2020-15-01'],
'FormName': ['Baseline','Baseline','Follow-up','Follow-up','Follow-up'],
'PersonID': [1, 1, 1, 1, 1]
})
df[['Previous_date',
'Rank']] = df.groupby(['PersonID',
'FormName']).agg(Previous_date=('encounterDate','shift'),
Rank=('encounterDate','cumcount'))
df['Rank']+=1
输出
encounterDate FormName PersonID Previous_date Rank
0 2019-01-12 Baseline 1 NaN 1
1 2020-01-01 Baseline 1 2019-01-12 2
2 2019-04-12 Follow-up 1 NaN 1
3 2019-13-12 Follow-up 1 2019-04-12 2
4 2020-15-01 Follow-up 1 2019-13-12 3
你能告诉我们你到目前为止都做了些什么吗?请重复一遍,然后开始。演示如何解决这个编码问题?堆栈溢出的主题已关闭。您必须诚实地尝试解决方案,然后询问有关实现的具体问题。Stack Overflow并不是为了取代现有的教程和文档。嗨,Chris,我实际上来自SQL,所以我有一个SQL的工作代码,但现在我想用Python来做这件事。下面是我在SQL中的代码:选择Conference_date、FormName、PersonID、date从Conference enc中选择maxenc.Conference_datetime,其中enc.patient_id=e.patient_id,enc.Conference_type=e.Conference_type和datee.Conference_datetime>dateenc.Conference_datetime从Conference中选择上一个日期e@John,你应该编辑你的原始问题并添加代码。谢谢你的解决方案克里斯!成功了!我真的很感激。