我有3列的dataframe,并且signal有2个开或关的值。时间戳。名字。信号
我想删除错误的指定信号值,并将其应用于df:
for i in np.arange(0,len(df)-1):
if (df.loc[i,'Signal']=='On' &
df.loc[i+1,'Signal']!='On' &
df.loc[i-1,'Signal']!='On'):
df.drop(i,inplace=True)然而,在这里我只能删除出现在Off值之间的单个值。例如:
Signal
Off
On
Off
Off但我也想删除下面这样的案例:
Signal
Off
Off
Off
On
On
Off
Off在我的代码中,只有第一个"on“值将被删除。
我怎么才能正确地解决它呢?
发布于 2021-11-26 03:49:23
试试这个:
s = df['Signal']
mask = df.groupby(['Name', s.ne(s.shift(1)).cumsum()], sort=False, as_index=False).apply(lambda x: pd.Series([x['Signal'].eq('On').sum() in (1, 2)] * len(x))).reset_index(drop=True) & (~df.groupby('Name')['Signal'].shift().isna())
df = df[~mask]https://stackoverflow.com/questions/70119319
复制相似问题