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

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

pandas DataFrame 的逐行處理

pandas DataFrame 的逐行處理

慕標琳琳 2023-06-27 18:14:30
您能幫忙解決一個具體任務嗎?我需要逐行處理 pandas DataFrame 列。要點是“無”值必須轉換為“0”或“1”,以便繼續處理列中已有的“0”或“1”值。我已經通過使用“for”循環完成了它,并且它工作正常:for i in np.arange(1, len(pd['signal'])):    if df.isnull(df['signal'].iloc[i]) and df['signal'].iloc[i-1] == 0:        df['signal'].iloc[i] = 0    if df.isnull(df['signal'].iloc[i]) and df['signal'].iloc[i-1] == 1:        df['signal'].iloc[i] = 1但是,事實上這并不是迭代 DataFrame 的好方法。我嘗試使用“loc”方法,但它帶來了不正確的結果,因為這樣每個步驟都不會考慮之前執行的結果,因此一些“None”值保持不變。df.loc[(df.isnull(df['signal'])) & (df['signal'].shift(1) == 0), 'signal'] = 0 df.loc[(df.isnull(df['signal'])) & (df['signal'].shift(1) == 1), 'signal'] = 1 有誰知道如何在沒有“for”循環的情況下實現此任務?
查看完整描述

2 回答

?
慕村225694

TA貢獻1880條經驗 獲得超4個贊

有專門用于此目的的矢量化函數,速度會快得多:


df = pd.DataFrame(dict(a=[1,1,np.nan, np.nan], b=[0,1,0,np.nan]))

df.ffill()



# df

     a    b

0  1.0  0.0

1  1.0  1.0

2  NaN  0.0

3  NaN  NaN


# output

     a    b

0  1.0  0.0

1  1.0  1.0

2  1.0  0.0

3  1.0  0.0


查看完整回答
反對 回復 2023-06-27
?
白豬掌柜的

TA貢獻1893條經驗 獲得超10個贊

您可以在以下位置使用 numpy:


import numpy as np


df['signal'] = np.where(pd.isnull(df['signal']), df['signal'].shift(1), df['signal'])


查看完整回答
反對 回復 2023-06-27
  • 2 回答
  • 0 關注
  • 509 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

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

公眾號

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