簡體   English   中英

根據另一列的值用 nan 替換值

[英]Replacing values with nan based on values of another column

這是我的 dataframe:

df = pd.DataFrame(
    {
        'a': [np.nan, np.nan, np.nan, 3333, np.nan,  np.nan, 10, np.nan, np.nan, np.nan, np.nan, 200, 100],
        'b': [np.nan, 20, np.nan, np.nan, np.nan, np.nan, np.nan, np.nan, 100, np.nan, np.nan, np.nan, np.nan]
    }
)

這是我想要的 output:

         a      b
0      NaN    NaN
1      NaN   20.0
2      NaN    NaN
3   3333.0    NaN
4      NaN    NaN
5      NaN    NaN
6      NaN    NaN
7      NaN    NaN
8      NaN  100.0
9      NaN    NaN
10     NaN    NaN
11   200.0    NaN
12     NaN    NaN

基本上,如果“b”列中的值不是 NaN,我想在 a 列中保留a值。 然后使 a 列中的 rest 個值a NaN,直到b列中的值不為 NaN。

例如,第一種情況是b列中的 20。 之后我想保留 3333,因為這是它下面的一個值,不是 NaN,我想用 NaN 替換 10,因為我已經有一個值低於b ,在這種情況下是 3333,它不是 NaN。 這同樣適用於b列中的 100。

我在 stackoverflow 上搜索了很多帖子,也嘗試了幾行,但沒有用。 我想也許可以通過fillna來完成。

一種方法

a_notna = df['a'].notna()
m = (a_notna.groupby(df['b'].notna().cumsum())
            .cumsum()
            .eq(1) & a_notna)
df['a'] = df['a'].where(m)
print(df)

         a      b
0      NaN    NaN
1      NaN   20.0
2      NaN    NaN
3   3333.0    NaN
4      NaN    NaN
5      NaN    NaN
6      NaN    NaN
7      NaN    NaN
8      NaN  100.0
9      NaN    NaN
10     NaN    NaN
11   200.0    NaN
12     NaN    NaN

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM