Python 子集df,其中值后面跟着一个单独的值-值
使用下面的代码,我希望删除任何与Python 子集df,其中值后面跟着一个单独的值-值,python,pandas,Python,Pandas,使用下面的代码,我希望删除任何与X相等的行,这些行后面没有直接跟 前一行中的BKE或DKE。此外,BKE、DKE和X之间的时间应相同,否则也应删除X df = pd.DataFrame({ 'Time' : [1,1,1,2,2,2,3,3,3], 'Item' : ['A','BKE','X','Y','X','DKE','X','Y','X'], }) df: 预期产出: Time Item 0 1 A 1
X
相等的行,这些行后面没有直接跟
前一行中的BKE
或DKE
。此外,BKE
、DKE
和X
之间的时间应相同,否则也应删除X
df = pd.DataFrame({
'Time' : [1,1,1,2,2,2,3,3,3],
'Item' : ['A','BKE','X','Y','X','DKE','X','Y','X'],
})
df:
预期产出:
Time Item
0 1 A
1 1 BKE
2 1 X
3 2 Y
4 2 DKE
5 3 Y
您可以分解您的条件,以提高可读性(并简化检查):
is_prev_ke=df['Item'].shift(1).isin({'BKE','DKE'})
is_x=(df['Item']='x')
上一次相同时间=df['time']==df['time']。移位(1,填充值=True)
newdf=df.loc[~is_x |(is_x&is_prev_ke&prev_same_time)]
检查示例:
cond=~is_x |(is_x&is_prev_ke&prev_same_time)
赋值(is_prev_ke=is_prev_ke,is_x=is_x,
上一次相同时间=上一次相同时间,秒=秒)
输出:
时间项为“上一个”或“上一个”相同的时间条件
0 1错误-错误-正确
1 1 BKE错误-错误-正确-正确
2 1 X真值
3 2 Y假假假真
4 2 X假-真-假
5.2 DKE假假真
6 3 X真-假-假
7 3 Y假假真
8 3 X假-真-假
Time Item
0 1 A
1 1 BKE
2 1 X
3 2 Y
4 2 DKE
5 3 Y
>>> newdf
Time Item
0 1 A
1 1 BKE
2 1 X
3 2 Y
5 2 DKE
7 3 Y