簡體   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