如何在列值发生变化时从数据帧中提取数据



当值从0变为1时,我想提取部分数据帧。

logic1:当值从0变为1时,开始保存数据,直到值再次变为0。(也指1之前和1之后的点(

logic2:当值从0变为1时,开始保存数据,直到值再次变为0。(不需要在1之前和1之后保存点数(

只有当标志的第一个时间值从0变为1时才保存数据,之后如果值从0再次变为1,则无需执行任何

df=pd.DataFrame({'value':[3,4,7,8,11,1,15,20,15,16,87],'flag':[0,0,0,1,1,1,0,0,1,1,0]})
Desired output:
df_out_1=pd.DataFrame({'value':[7,8,11,1,15]})
Desired output:
df_out_2=pd.DataFrame({'value':[8,11,1]})

思想是从10的连续组到s,只过滤1组,通过最小值比较得到第一个1组:

df = df.reset_index(drop=True)
s = df['flag'].ne(df['flag'].shift()).cumsum()
m = s.eq(s[df['flag'].eq(1)].min())
df2 = df.loc[m, ['value']]
print (df2)
value
3      8
4     11
5      1

然后用aff过滤值,并将1删除为默认的RangeIndex:

df1 = df.loc[(df2.index + 1).union(df2.index - 1), ['value']]
print (df1)
value
2      7
3      8
4     11
5      1
6     15

最新更新