我有一个包含多个列的数据框和一个系列,其值是数据帧的第一个非nan值的索引:
dataframe x:
a b c d e f g h
1 nan nan 2 nan nan nan nan nan
2 nan 2 nan 10 23 nan nan nan
3 3 nan 23 42 232 3 nan 5
系列y:
a 3
b 2
c 1
d 2
e 2
f 3
g nan
h 3
现在我想在第一个非纳米值(包括第一个非纳米值)之后用系列的值(其值是数据帧x的第一个非纳米值的索引)分配0以及所有值)
结果是
a b c d e f g h
1 nan nan 0 nan nan nan nan nan
2 nan 0 0 0 0 nan nan nan
3 0 0 0 0 0 0 nan 0
我使用applymap来处理它,但是applymap似乎没有处理索引信息,这里是我的代码:
def mycode(x,y)
if x.index<=Y:
return 0
else:
return x
cal = x.applymap(lambda x: mycode(x,y))
答案 0 :(得分:0)
您可以将ffill
(fillna
与method='ffill'
)与clip
一起使用:
x = x.ffill().clip(0,0)
x = x.where(x.ffill().isnull(), 0)
x = x.mask(x.ffill().notnull(), 0)
print (x)
a b c d e f g h
1 NaN NaN 0.0 NaN NaN NaN NaN NaN
2 NaN 0.0 0.0 0.0 0.0 NaN NaN NaN
3 0.0 0.0 0.0 0.0 0.0 0.0 NaN 0.0
详情:
print (x.ffill())
a b c d e f g h
1 NaN NaN 2.0 NaN NaN NaN NaN NaN
2 NaN 2.0 2.0 10.0 23.0 NaN NaN NaN
3 3.0 2.0 23.0 42.0 232.0 3.0 NaN 5.0
print (x.ffill().isnull())
a b c d e f g h
1 True True False True True True True True
2 True False False False False True True True
3 False False False False False False True False