Python 引入条件时无法使用fillna

Python 引入条件时无法使用fillna,python,pandas,Python,Pandas,我对python非常陌生。试图对我的数据进行一些插补。然而,我无法管理。下面是简单的代码: df['a'] = "" df.loc[(df['c'] >= 0) & (df['c'] <= 43), 'a'] = 1 df.loc[(df['c'] >= 44) & (df['c'] <= 96), 'a'] = 2 df.loc[(df['c'] >= 97) & (df['c'] <= 151), 'a'] = 3 df.loc[(

我对python非常陌生。试图对我的数据进行一些插补。然而,我无法管理。下面是简单的代码:

df['a'] = ""
df.loc[(df['c'] >= 0) & (df['c'] <= 43), 'a'] = 1
df.loc[(df['c'] >= 44) & (df['c'] <= 96), 'a'] = 2
df.loc[(df['c'] >= 97) & (df['c'] <= 151), 'a'] = 3
df.loc[(df['c'] >= 152) & (df['c'] <= 273), 'a'] = 4

print(df[df['a'] == 1]['b'].median())
print(df[df['a'] == 2]['b'].median())
print(df[df['a'] == 3]['b'].median())
print(df[df['a'] == 4]['b'].median())

print(df[df['a'] == 1]['b'].median())

    df[df['a'] == 1]['b'].fillna(df[df['a'] == 1]['b'].median(), inplace=True)
如何正确应用fillna?

使用:

#Use.loc when you try to change df values.
df.loc[df.a==1,'b'] = df.loc[df.a==1,'b'].fillna(df[df['a'] == 1]['b'].median())
使用:


尝试df.loc[df['a']==1,'b'].fillnadf['b'].median,inplace=TruePost代码,该代码实际上是可运行的,没有我们不需要的额外内容。并发布完整的回溯,行号显示是什么代码导致了问题。感谢您的及时回答!我可能会提供丢失的信息。请看编辑后的帖子。我喜欢根据每个特定类别为相关单元格指定中值。上面的建议没有任何效果,除非现在我没有收到警告。请尝试df.loc[df['a']==1,'b'].fillnadf['b'].median,inplace=TruePost代码,它实际上是可运行的,没有我们不需要的额外内容。并发布完整的回溯,行号显示是什么代码导致了问题。感谢您的及时回答!我可能会提供丢失的信息。请看编辑后的帖子。我喜欢根据每个特定类别为相关单元格指定中值。上面的建议没有任何效果,除非现在我没有收到警告。在深入测试后,我意识到include_lowest=True对于include 0值是必要的。啊,是的,我注意到了,而不是使用0,我使用了-1。在深入测试后,我意识到include_lowest=True对于include 0值是必要的。啊,是的,我注意到了,相反使用0时,我使用了-1。
#Use.loc when you try to change df values.
df.loc[df.a==1,'b'] = df.loc[df.a==1,'b'].fillna(df[df['a'] == 1]['b'].median())
df = pd.DataFrame({'c':[10,50,100,200] * 3,
                   'b':[1,3,8,np.nan,5,8,np.nan,7, np.nan, 4,1,0]})
#print (df)
m1 = (df['c'] >= 0) & (df['c'] <= 43)
m2 = (df['c'] >= 44) & (df['c'] <= 96)
m3 = (df['c'] >= 97) & (df['c'] <= 151)
m4 = (df['c'] >= 152) & (df['c'] <= 273)

df.loc[m1,'b'] = df.loc[m1,'b'].fillna(df.loc[m1,'b'].median())
df.loc[m2,'b'] = df.loc[m2,'b'].fillna(df.loc[m2,'b'].median())
df.loc[m3,'b'] = df.loc[m3,'b'].fillna(df.loc[m3,'b'].median())
df.loc[m4,'b'] = df.loc[m4,'b'].fillna(df.loc[m4,'b'].median())

print (df)
      b    c
0   1.0   10
1   3.0   50
2   8.0  100
3   3.5  200
4   5.0   10
5   8.0   50
6   4.5  100
7   7.0  200
8   3.0   10
9   4.0   50
10  1.0  100
11  0.0  200
bins = [0,43,96,151,273]
labels=[1,2, 3, 4]
df['a'] = pd.cut(df['c'], bins=bins, labels=labels, include_lowest=True)
df['b'] = df.groupby('a')['b'].apply(lambda x: x.fillna(x.median()))
print (df)
      b    c  a
0   1.0   10  1
1   3.0   50  2
2   8.0  100  3
3   3.5  200  4
4   5.0   10  1
5   8.0   50  2
6   4.5  100  3
7   7.0  200  4
8   3.0   10  1
9   4.0   50  2
10  1.0  100  3
11  0.0  200  4