您能幫忙解決一個具體任務(wù)嗎?我需要逐行處理 pandas DataFrame 列。要點是“無”值必須轉(zhuǎn)換為“0”或“1”,以便繼續(xù)處理列中已有的“0”或“1”值。我已經(jīng)通過使用“for”循環(huán)完成了它,并且它工作正常: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 的好方法。我嘗試使用“l(fā)oc”方法,但它帶來了不正確的結(jié)果,因為這樣每個步驟都不會考慮之前執(zhí)行的結(jié)果,因此一些“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”循環(huán)的情況下實現(xiàn)此任務(wù)?
2 回答

慕村225694
TA貢獻1880條經(jīng)驗 獲得超4個贊
有專門用于此目的的矢量化函數(shù),速度會快得多:
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

白豬掌柜的
TA貢獻1893條經(jīng)驗 獲得超10個贊
您可以在以下位置使用 numpy:
import numpy as np
df['signal'] = np.where(pd.isnull(df['signal']), df['signal'].shift(1), df['signal'])
添加回答
舉報
0/150
提交
取消