您能帮忙解决一个具体任务吗?我需要逐行处理 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 回答
![?](http://img1.sycdn.imooc.com/545862aa0001f8da02200220-100-100.jpg)
慕村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
![?](http://img1.sycdn.imooc.com/54584de700017cbd02200220-100-100.jpg)
白猪掌柜的
TA贡献1893条经验 获得超10个赞
您可以在以下位置使用 numpy:
import numpy as np
df['signal'] = np.where(pd.isnull(df['signal']), df['signal'].shift(1), df['signal'])
添加回答
举报
0/150
提交
取消