我有三列,t
,b
和h
一个数据帧:棘手帧内列逻辑
t b h
0 NaN False 6
1 6.023448 False 38
2 12.996233 False 46
3 2.484907 False 67
4 5.062595 False 81
5 4.624973 False 82
6 3.367296 False 38
7 3.688879 False 53
8 6.926577 True 38
9 14.972346 False 81
10 14.442651 False 78
11 3.367296 False 67
12 5.236442 False 46
13 5.298317 True 8
,我想以生成用于传播的h
每个实例的值的新列其中b==True
倒退,并且只能达到下一个这样的实例或第一次出现t>9.5
。其余的充满了NaN
的。这里是我需要的输出的一个例子:
t b h i
0 NaN False 6 NaN
1 6.023448 False 38 NaN
2 12.996233 False 46 38
3 2.484907 False 67 38
4 5.062595 False 81 38
5 4.624973 False 82 38
6 3.367296 False 38 38
7 3.688879 False 53 38
8 6.926577 True 38 38
9 14.972346 False 81 NaN
10 14.442651 False 78 8
11 3.367296 False 67 8
12 5.236442 False 46 8
13 5.298317 True 8 8
我想避免遍历行,因为我有他们的数以百万计。我尝试使用bfill选项获得b==True
实例where
,然后fillna
带有bfill选项,但无法告诉他何时开始填充。此外,这将是apply
“ED个别基团的groupby
内,所以我需要的功能,增加了一列到它的参数,并返回到整个帧
def get_i(x):
x['i']=x['h'].where(x['b']==True).fillna(value=None,method='backfill').dropna()
return x
很好的解决方案! – MaxU
美观大方 –
谢谢你的接受。 – jezrael