在这种情况下,除了循环之外,pandas 中是否有任何更简单的方法来替换空值?

我正在尝试用每个组(分组区域)中的数字模式替换空值。Pandas 中有没有更简单的方法可以做到这一点?


我已经通过循环方法完成了它,不推荐用于非常大的数据集。


data = {'area':['abc', 'abc', 'abc', 'abc','bcd', 'bcd', 'bcd' , 

'cde','cde', 'cde', 'cde', 'cde'], 'number':[1, 2, 2, np.nan, 3, 3, 

np.nan, 5, 5, 4, np.nan, np.nan]}

df = pd.DataFrame(data)


Hell = pd.DataFrame(df.groupby("area")['number'].agg(lambda 

x:x.value_counts().index[0])).reset_index()


import math

for index in range(0,df.shape[0]):   

    if math.isnan(df['number'][index]):

        for i in range(0,Hell.shape[0]):

            if Hell['area'][i] == df['area'][index]:

                df['number'][index] = Hell['number'][i]


ABOUTYOU
浏览 132回答 1
1回答

慕运维8079593

使用Series.fillnawithSeries.map替换匹配值 by area:df['number'] = df['number'].fillna(df['area'].map(Hell.set_index('area')['number']))print (df)   area  number0   abc     1.01   abc     2.02   abc     2.03   abc     2.04   bcd     3.05   bcd     3.06   bcd     3.07   cde     5.08   cde     5.09   cde     4.010  cde     5.011  cde     5.0或者将您的解决方案GroupBy.transform用于相同的系列,例如由聚合值填充的原始系列:s = df.groupby("area")['number'].transform(lambda x: x.value_counts().index[0])#alternative#s = df.groupby("area")['number'].transform(lambda x: x.mode().iat[0])df['number'] = df['number'].fillna(s)print (df)   area  number0   abc     1.01   abc     2.02   abc     2.03   abc     2.04   bcd     3.05   bcd     3.06   bcd     3.07   cde     5.08   cde     5.09   cde     4.010  cde     5.011  cde     5.0
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python