【发布时间】:2020-10-19 11:27:56
【问题描述】:
df2 = pd.DataFrame({'person_id':[11,11,11,11,11,12,12,13,13,14,14,14,14],
'admit_date':['01/01/2011','01/01/2009','12/31/2013','12/31/2017','04/03/2014','08/04/2016',
'03/05/2014','02/07/2011','08/08/2016','12/31/2017','05/01/2011','05/21/2014','07/12/2016']})
df2 = df2.melt('person_id', value_name='dates')
df2['dates'] = pd.to_datetime(df2['dates'])
我想做的是
a) 如果主题的记录中有Dec 31st 和Jan 1st,则从数据框中排除/过滤记录。请注意year 无关紧要。
如果主题有Dec 31st 或Jan 1st,我们保持原样。
但如果他们同时拥有 Dec 31st 和 Jan 1st,我们会删除其中一个(12 月 31 日或 1 月 1 日)。请注意,他们也可能有多个具有相同日期的条目。赞person_id = 11
我只能做到以下几点
df2_new = df2['dates'] != '2017-12-31' #but this excludes if a subject has only `Dec 31st on 2017`. How can I ignore the dates and not consider `year`
df2[df2_new]
我的预期输出如下所示
对于 person_id = 11,我们删除 12-31,因为它的记录中同时包含 12-31 和 01-01,而对于 person_id = 14,我们不删除 12-31,因为它的记录中只有 12-31记录。
仅当 12-31 和 01-01 都出现在某人的记录中时,我们才会删除 12-31。
【问题讨论】:
-
是否可以为 31.12 和 1.1 对添加更通用的解决方案?
标签: python python-3.x pandas dataframe pandas-groupby