Pandas 日复一日地排除具有某些值的ID
我有这个df:Pandas 日复一日地排除具有某些值的ID,pandas,Pandas,我有这个df: ID Date X Y A 16-07-19 123 56 A 17-07-19 456 84 A 18-07-19 0 58 A 19-07-19 123 81 B 19-07-19 456 70 B 21-07-19 789 46 B 22-07-19 0 19 B 23-07-19 0 91 C 14-07-19 0 86 C 16-07-19 456 91
ID Date X Y
A 16-07-19 123 56
A 17-07-19 456 84
A 18-07-19 0 58
A 19-07-19 123 81
B 19-07-19 456 70
B 21-07-19 789 46
B 22-07-19 0 19
B 23-07-19 0 91
C 14-07-19 0 86
C 16-07-19 456 91
C 17-07-19 456 86
C 18-07-19 0 41
C 19-07-19 456 26
C 20-07-19 456 17
D 06-07-19 789 98
D 08-07-19 789 90
D 09-07-19 0 94
我想逐日排除在X
列中有任何值的ID(除了0
)
例如:A
在16-07-19
上的值为123
,在17-07-19
上的值为456
。因此,应排除所有A
的观察结果
预期结果:
ID Date X Y
B 19-07-19 456 70
B 21-07-19 789 46
B 22-07-19 0 19
B 23-07-19 0 91
D 06-07-19 789 98
D 08-07-19 789 90
D 09-07-19 0 94
让我们以矢量化的方式来实现这一点,以尽可能保持代码的效率 (意思是:我们避免使用
GroupBy.apply
)
Date
中的差异是否等于1天
X
列是否不等于0
m
,检查这两个条件是否都为True
ID
上groupby
并删除行中任何
为True
#df['Date']=pd.to_datetime(df['Date'])
# df['Date'] = pd.to_datetime(df['Date']) <- if Date is not datetime type
m1 = df['Date'].diff(1).eq(pd.Timedelta(1, unit='d'))
m2 = df['X'].ne(0)
df['m'] = m1&m2
df = df[~df.groupby('ID')['m'].transform('any')].drop(columns='m')
ID Date X Y
4 B 2019-07-19 456 70
5 B 2019-07-21 789 46
6 B 2019-07-22 0 19
7 B 2019-07-23 0 91
14 D 2019-06-07 789 98
15 D 2019-08-07 789 90
16 D 2019-09-07 0 94