[英]Data frame (Pandas) filling Missing Values
我们被要求根据以下假设填充数据框列中的缺失值(假设为 df['A']): 1- 如果同一行的 df['B'] 的值大于 1000 , 使用 0。 2- 否则,使用 df['A'] 的平均值
我使用了以下代码,它运行良好。
mean_value = df['A'].mean()
df['A'].loc[(df['A'].isna()) & (df['B] > 1000)] = 0
df['A'].fillna(mean_value, inplace = True)
但是您可以看到,两行代码用于填充 null 值。 有什么方法可以只用一行替换它吗?
也许你可以使用这个
check1 = df['A'].isna()
check2 = (df['A'].isna()) & (df['B'] > 1000)
df['A'] = np.where(check1 , np.where(check2,2000,df['A'].mean()), df['A'])
示例输入
A B
0 5.0 500
1 NaN 2000
2 3.0 1500
3 4.0 1100
4 NaN 7
示例 Output
A B
0 5.0 500
1 2000.0 2000
2 3.0 1500
3 4.0 1100
4 4.0 7
您可以查看np.select
con1=(df['A'].isna()) & (df['B'] > 1000)
con2=df['A'].isna()
df['A']=np.select([con1,con2],[0,df['A'].mean()],default=df.A)
您可以尝试这种算术方式,尽管在这种情况下单行只会让人难以阅读。 由于您将问题从2000
编辑为0
,因此无需添加。 所以,答案是
df['A'] = df.A.fillna((df['B'] <= 1000) * df.A.mean())
我使用了以下代码行并且它有效,但我仍然相信应该有一种更温和的方法来解决这个问题。
df['A'] = df.apply(lambda x: x['A'] if not(np.isnan(x['A'])) else (0 if x['B'] > 1000 else mean_value), axis = 1)
任何想法?
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.