【问题标题】:How would I fill NA values in Pandas based on a lookup?如何根据查找在 Pandas 中填充 NA 值?
【发布时间】:2020-09-21 07:54:04
【问题描述】:

我有一些 NA 值,但我想用特定的查找替换它们。让我给你举个例子。

>>> runners_df = pd.DataFrame(runners)
>>> runners_df
   年名英里
0 2010 保罗 6.0
1 2010 保罗 4.0
2 2010 保罗·南
3 2011 保罗 8.0
4 2011 保罗 8.0
5 2012 保罗 9.0
6 2012 保罗 12.0
>>> average_miles_per_year = runners_df.groupby(['year','name'])['miles'].mean().reset_index()
>>> average_miles_per_year
   年名英里
0 2010 保罗 5.0
1 2011 保罗 8.0
2 2012 保罗 10.5
>>>

在这种情况下,我希望用 5.0 填充 Pauls NaN 值,因为 2010 年他的平均里程为 5。

非常感谢。

【问题讨论】:

    标签: python pandas data-science


    【解决方案1】:

    尝试将fillnagroupbytransform 一起使用:

    runners['miles'] = runners['miles'].fillna(runners.groupby(['year','name'])['miles']
                                                      .transform('mean'))
    

    输出:

       year  name  miles
    0  2010  Paul    6.0
    1  2010  Paul    4.0
    2  2010  Paul    5.0
    3  2011  Paul    8.0
    4  2011  Paul    8.0
    5  2012  Paul    9.0
    6  2012  Paul   12.0
    

    【讨论】:

    • 非常感谢!效果很好。如果我想做同样的事情,除了一个分类变量。例如,如果一列是“outdoor_track”,我想用他一年中最常运行的轨道位置填充缺失值。显然 transform('mean') 在这种情况下不起作用
    • @Al92 尝试中位数,该分类值中出现次数最多的实例。
    猜你喜欢
    • 1970-01-01
    • 2017-12-05
    • 2022-08-18
    • 1970-01-01
    • 1970-01-01
    • 2021-07-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多