用NaN更新列,其中包含已过滤行的平均值

时间:2019-05-08 05:18:01

标签: python pandas

我有以下DataFrame

[="foo]

我需要用CITY为'A'或'C'的平均值填充NaN

我尝试的以下代码仅更新了VOTES中的第一行,其余的全部更新为了NaN。

VOTES    CITY
 24      A
 22      A
 20      B
 NaN     A
 NaN     A
 30      B
 NaN     C

除一条记录的索引为0以外,所有值之后的“ VOTES”输出将更新为“ NaN”。尽管如此,均可以正确计算平均值。

1 个答案:

答案 0 :(得分:1)

仅将Series.fillna用于具有已过滤行均值的已过滤行:

train['VOTES_EN']=train['VOTES'].astype(str).str.extract(r'(-?\d+\.?\d*)').astype(float)
m= train['CITY'].isin(['A','C'])
mean = train.loc[m,'VOTES_EN'].mean() 
train.loc[m,'VOTES_EN']=train.loc[m,'VOTES_EN'].fillna(mean)
train['VOTES_EN'] = train['VOTES_EN'].astype(int)
print (train)
   VOTES CITY  VOTES_EN
0   24.0    A        24
1   22.0    A        22
2   20.0    B        20
3    NaN    A        23
4    NaN    A        23
5   30.0    B        30
6    NaN    C        23