繁体   English   中英

填充缺失值的数据框(熊猫)

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

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM