根据条件使用熊猫排除特定日期

最棒的
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 31stJan 1st在其记录中,则从数据框中排除/过滤记录。请注意,year没关系。

如果一个对象具有两种Dec 31st或者Jan 1st,我们让他们为是

但是,如果它们同时具有Dec 31stJan 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只有在两者12-31同时01-01出现才会掉落出现在一个人的记录中。

Shubham Sharma

采用:

s = df2['dates'].dt.strftime('%m-%d')
m1 = s.eq('01-01').groupby(df2['person_id']).transform('any')
m2 = s.eq('12-31').groupby(df2['person_id']).transform('any')
m3 = np.select([m1 & m2, m1 | m2], [s.ne('12-31'), True], default=True)
df3 = df2[m3]

结果:

# print(df3)
    person_id    variable      dates
0          11  admit_date 2011-01-01
1          11  admit_date 2009-01-01
4          11  admit_date 2014-04-03
5          12  admit_date 2016-08-04
6          12  admit_date 2014-03-05
7          13  admit_date 2011-02-07
8          13  admit_date 2016-08-08
9          14  admit_date 2017-12-31
10         14  admit_date 2011-05-01
11         14  admit_date 2014-05-21
12         14  admit_date 2016-07-12

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章