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

时间:2019-09-19 01:40:13

标签: python pandas missing-data

我们被要求基于以下假设在数据框的某列(例如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)

但是您会看到两行代码用于填充空值。有什么方法可以只用一行替换吗?

4 个答案:

答案 0 :(得分:1)

也许您可以使用此

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

示例输出

      A     B
0   5.0     500
1   2000.0  2000
2   3.0     1500
3   4.0     1100
4   4.0     7

答案 1 :(得分:1)

您可以检查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)

答案 2 :(得分:1)

您可以尝试这种算术方式,尽管在这种情况下只有一线很难阅读。由于您将问题从2000修改为0,因此无需添加。所以,答案是

df['A'] = df.A.fillna((df['B'] <= 1000) * df.A.mean())

答案 3 :(得分:0)

我使用了以下代码行,并且可以正常工作,但我仍然相信应该有一种更为温和的方式来解决此问题。

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)

有什么主意吗?