为了账号安全,请及时绑定邮箱和手机立即绑定

用 Python 中同一列中的下一个值填充 NaN 值

用 Python 中同一列中的下一个值填充 NaN 值

精慕HU 2024-01-27 14:39:16
我想用NaN列中的下一个值填充值:numberdf        Id  Date        is_start        number151256  30  2010-09-21  False           NaN237558  30  2010-09-22  False           0.036922   120 2010-10-13  False           0.0246284  80  2010-09-21  False           NaN47655   80  2010-09-21  False           658.0可重现的例子:import pandas as pdimport numpy as npimport datetimesample_df = pd.DataFrame({'Id': {151256: 30, 237558: 30, 36922: 120, 246284: 80, 47655: 80}, 'Date': {151256: datetime.date(2010, 9, 21),  237558: datetime.date(2010, 9, 22),  36922: datetime.date(2010, 10, 13),  246284: datetime.date(2010, 9, 21),  47655: datetime.date(2010, 9, 21)}, 'is_start': {151256: False,  237558: False,  36922: False,  246284: False,  47655: False}, 'number': {151256: np.nan,  237558: 0.0,  36922: 0.0,  246284: np.nan,  47655: 658.0}})sample_df预期输出:        Id  Date        is_start        number151256  30  2010-09-21  False           0.0   (replaced)237558  30  2010-09-22  False           0.036922   120 2010-10-13  False           0.0246284  80  2010-09-21  False           658.0 (replaced)47655   80  2010-09-21  False           658.0我试过:sample_df['number'] = sample_df.fillna(sample_df.number.shift())但得到输出:        Id  Date    is_start    number151256  30  2010-09-21  False   30237558  30  2010-09-22  False   3036922   120 2010-10-13  False   120246284  80  2010-09-21  False   8047655   80  2010-09-21  False   80其中number采用Id列中的值。为什么会发生这种情况以及正确的方法是什么?
查看完整描述

2 回答

?
一只名叫tom的猫

TA贡献1906条经验 获得超2个赞

这里检查bfill注意限制是只填充下一个NaN值


df.number = df.number.bfill(limit=1)

Out[138]: 

151256      0.0

237558      0.0

36922       0.0

246284    658.0

47655     658.0

Name: number, dtype: float64


查看完整回答
反对 回复 2024-01-27
?
至尊宝的传说

TA贡献1789条经验 获得超10个赞

BEN_YO 的解决方案就是答案,但这里有一个使用fillnaand的替代方案shift(-1):


sample_df['number'] = sample_df['number'].fillna(sample_df['number'].shift(-1))

sample_df

Out[1]: 

         Id        Date  is_start  number

151256   30  2010-09-21     False     0.0

237558   30  2010-09-22     False     0.0

36922   120  2010-10-13     False     0.0

246284   80  2010-09-21     False   658.0

47655    80  2010-09-21     False   658.0


查看完整回答
反对 回复 2024-01-27
  • 2 回答
  • 0 关注
  • 28 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信