[英]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.