我有一个下面的DataFrame:
df[16820:16830]
data0 start_stop
16820 1 0
16821 1 1
16822 1 0
16823 1 0
16824 1 0
16825 1 -1
16826 0 0
16827 0 0
16828 1 1
16829 0 0
16830 1 -1
我需要做的是将start_stop列中的1到-1之间的值标记为有效(1表示“开始”,-1表示“停止”),并将-1到1之间的值标记为无效(我将以后丢弃)。 有什么有效的方法可以做到这一点,而不是遍历整个数据帧的循环吗?
最终结果如下:
data0 start_stop valid
16820 1 0 False
16821 1 1 True
16822 1 0 True
16823 1 0 True
16824 1 0 True
16825 1 -1 False
16826 0 0 False
16827 0 0 False
16828 1 1 True
16829 0 0 True
16830 1 -1 False
...
我认为,实现这一目标的相关循环是
df = df.reset_index(drop=True)
value = False
for i in range(0,df.shape[0]):
if df.loc[i, 'start_stop'] == 1:
df.loc[i,'valid'] = True
value = True
elif df.loc[i, 'start_stop'] == -1:
df.loc[i, 'valid'] = False
value = False
if df.loc[i, 'start_stop'] == 0:
df.loc[i, 'valid'] = value
谢谢!
答案 0 :(得分:6)
这应该有效
df['valid'] = df.start_stop.cumsum()
然后
df['valid'] = df['valid'].apply(lambda x: True if x==1 else False)
df
start_stop valid
0 0 False
1 1 True
2 0 True
3 0 True
4 0 True
5 -1 False
6 0 False
7 0 False
8 1 True
9 0 True
10 -1 False