我正在填充我拥有的熊猫数据框中的缺失值。最简单的情况是在缺少值的整个列上使用 df.fillna()。这可行,但是我想通过添加条件来扩展它。
即,我根据类别计算中位数,如果缺少的值具有Label ='A',那么它将用具有Label ='A'的所有值的中位数填充
同样,如果一个值具有Label ='B',则该值将被所有具有Label ='B'的值的中位数填充
下面是可行的代码。
df = pd.DataFrame([[20,'A'],[24,'B'],[23,'A'],[22,'B'],[np.nan,'A'],[24,'B'],[np.nan,'B']],columns=['Value','Label'])
A_median = np.nanmedian(df[df['Label']=='A']['Value'])
B_median = np.nanmedian(df[df['Label']=='B']['Value'])
当前数据框为:
Value Label
0 20.0 A
1 24.0 B
2 23.0 A
3 22.0 B
4 NaN A
5 24.0 B
6 NaN B
所需的输出是:
Value Label
0 20.0 A
1 24.0 B
2 23.0 A
3 22.0 B
4 21.5 A
5 24.0 B
6 24.0 B
我尝试了以下操作,但它导致所有其他值均为NaN:
df['Value'] = df[df['Label'] == 'A']['Value'].fillna(A_median)
预先感谢您的帮助!如果您需要更多信息,请告诉我:)
编辑:我知道有人问过类似的问题,但我主要是想了解如何设置值而不会导致其他类别为空。