繁体   English   中英

熊猫数据框在第一个非nan值之后为所有值分配0

[英]Pandas dataframe assign 0 with all the value after first non-nan value

我有一个包含几列和一个系列的数据框,其值是该数据框的第一个非Nan值的索引:

数据框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的第一个非NAN值的索引)将第一个非NAN值(包括第一个非NAN值)之后的所有值赋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))

可以使用ffillfillnamethod='ffill' )与clip

x = x.ffill().clip(0,0)

布尔掩码和wheremask替代解决方案:

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM