我有2个df。第一个是id列表,对于每个id,都有2013年1月1日至2013年12月31日的列表。我有30个唯一的id,例如df1:
id date
1 01-01-2013
1 01-02-2013
1 01-03-2013
....
1 12-31-2013
2 01-01-2013
2 01-02-2013
....
2 12-31-2013
我的第二个df是id,sub_id(每个sub_id都包含一些id(诊断日期和疾病标签-0或1。例如:
id sub_id date disease
1 345 01-01-2013 0
1 967 01-01-2013 1
2 843 06-03-2013 0
等等。我想合并基于id和date的df。因此,我将获得一年中每一个带有疾病标签的id的连续天数。我不在乎sub_id,但如果我有两个相同的日期,并且我至少有一个生病的sub_id我想在当天返回标签1。如果没有值,用0填充nan例如:df2
id date disease
1 01-01-2013 1
1 01-02-2013 0
1 01-13-2013 0
.....
我试过这个代码:
df2.sort_values('disease').drop_duplicates(subset='date', keep='last').merge(df1,on=['id','date'],how='right')
但是某个id的标签为1,其结果标签为0感谢
我会使用groupby
:
df2.groupby(['id','date']).max().reset_index().merge(df1,on=['id','date'],how='right')