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

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

在這種情況下,除了循環之外,pandas 中是否有任何更簡單的方法來替換空值?

在這種情況下,除了循環之外,pandas 中是否有任何更簡單的方法來替換空值?

ABOUTYOU 2022-06-28 10:11:30
我正在嘗試用每個組(分組區域)中的數字模式替換空值。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 mathfor 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]
查看完整描述

1 回答

?
慕運維8079593

TA貢獻1876條經驗 獲得超5個贊

使用Series.fillnawithSeries.map替換匹配值 by area:


df['number'] = df['number'].fillna(df['area'].map(Hell.set_index('area')['number']))

print (df)

   area  number

0   abc     1.0

1   abc     2.0

2   abc     2.0

3   abc     2.0

4   bcd     3.0

5   bcd     3.0

6   bcd     3.0

7   cde     5.0

8   cde     5.0

9   cde     4.0

10  cde     5.0

11  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  number

0   abc     1.0

1   abc     2.0

2   abc     2.0

3   abc     2.0

4   bcd     3.0

5   bcd     3.0

6   bcd     3.0

7   cde     5.0

8   cde     5.0

9   cde     4.0

10  cde     5.0

11  cde     5.0


查看完整回答
反對 回復 2022-06-28
  • 1 回答
  • 0 關注
  • 147 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

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

公眾號

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