【发布时间】:2017-06-29 11:15:42
【问题描述】:
在 groupby 元素上使用 'bfill' 或 'ffill' 很简单,但是如果您需要根据第三列中的条件在第二列中用特定值填充 na 怎么办?
例如:
>>> df=pd.DataFrame({'date':['01/10/2017', '02/09/2017', '02/10/2016','01/10/2017', '01/11/2017', '02/10/2016'], 'a':[1,1,1,2,2,2], 'b':[4,np.nan,6, 5, np.nan, 7]})
>>> df
a b date
0 1 4.0 01/10/2017
1 1 NaN 02/09/2017
2 1 6.0 02/10/2016
3 2 5.0 01/10/2017
4 2 NaN 01/11/2017
5 2 7.0 02/10/2016
我需要按“a”列分组,并用“b”列值填充 NaN,其中该行的日期最接近 NaN 行中的日期。
所以输出应该是这样的:
a b date
0 1 4.0 01/10/2017
1 1 6.0 02/09/2017
2 1 6.0 02/10/2016
3 2 5.0 01/10/2017
4 2 5.0 01/11/2017
5 2 7.0 02/10/2016
假设有一个最接近日期() 函数,它获取 NaN 日期和该组中其他日期的列表,并返回最接近的日期。
我正在尝试找到一个无需遍历行的干净解决方案,理想情况下能够将 apply() 与 lambdas 一起使用。有什么想法吗?
【问题讨论】:
-
您的数据似乎不正确。对于
a == 1组,您选择了6来填写nan。但是,01/10/2017似乎更接近02/09/2017,这意味着4应该是填充值。