【发布时间】:2016-06-07 10:09:54
【问题描述】:
我有一个包含三列的 DataFrame,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 的每个实例的值向后传播,并且只传播到下一个此类实例或 t>9.5 的第一次出现。其余的都是NaN's。这是我需要的输出示例:
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
我想避免迭代行,因为我有数百万行。我尝试使用where 获取b==True 实例,然后使用bfill 选项获取fillna,但无法告诉他何时开始填充。此外,这将被 apply'ed 到 groupby 中的各个组,所以我需要一个函数来为其参数添加一列并返回整个帧
def get_i(x):
x['i']=x['h'].where(x['b']==True).fillna(value=None,method='backfill').dropna()
return x
【问题讨论】:
标签: python pandas dataframe nan cumsum