亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

用 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條經驗 獲得超3個贊

這里檢查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 關注
  • 172 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號