[英]How can I replace NaN values based on multiple conditions?
我在熊貓數據框中有 3 列。 它們是 A、B 和 C 列。
data = {"A": [10,12,30,21],
"B": [12,24,16,31],
"C": [1,None,None,4]}
df = pd.DataFrame(data, columns = ["A", "B", "C"])
print(df)
我想根據 B 列中的數據替換 C 列中的 NaN 值,這樣:
這樣做的最有效方法是什么?
您可以使用字典創建replacement_value: index_mask
映射,然后對其進行迭代,如下所示:
>>> masks = {1: (df['B'] >= 10) & (df['B'] < 20) & df['C'].isnull(), 2: (df['B'] >= 20) & (df['B'] < 30) & df['C'].isnull(), 3: (df['B'] >= 30) & df['C'].isnull()}
>>> masks
{1: 0 False
1 False
2 True
3 False
dtype: bool, 2: 0 False
1 True
2 False
3 False
dtype: bool, 3: 0 False
1 False
2 False
3 False
dtype: bool}
>>> for replacement_value, mask in masks.items():
... df.loc[mask, 'C'] = replacement_value
...
>>> df
A B C
0 10 12 1.0
1 12 24 2.0
2 30 16 1.0
3 21 31 4.0
請注意,我將條件之間的上界排除在外,即用 1 替換df['B']
需要在[10, 20)]
范圍內; 替換為 2 [20, 30)
等,因為否則你會有重疊的邊界。
我想你可以試試這個:
import numpy as np
df['C'].loc[(df['B']<=10) & (df['B']>=1) & (df['C'].isnull())]=1
df['C'].loc[(df['B']<=20) & (df['B']>=11) & (df['C'].isnull())]=2
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.