我有以下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”。尽管如此,均可以正确计算平均值。
答案 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