python - pandas DataFrame的逐行处理
问题描述
您能否帮助解决特定任务。我需要逐行处理 pandas DataFrame 列。要点是必须将“None”值转换为“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”方法,但它带来了不正确的结果,因为这样每一步都不会考虑以前执行的结果,因此一些“无”值保持不变。
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”循环的情况下实现此任务?
解决方案
为此目的,有一些矢量化函数会更快:
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
推荐阅读
- python - ValueError:找不到表
- wordpress - wordpress 中的站点 URL 和管理 URL 短代码问题
- javascript - Node.js 和 Express:路由器内部的函数返回值
- reactjs - 忽略反应钩子上缺少的依赖项 es-lint 警告是否安全?
- javascript - TypeError: undefined is not an object (评估'_this2.props.navigation.navigate')
- angular - 无法读取未定义的属性“dtInstance”
- node.js - Passport Js自定义回调函数不调用下一个中间件
- javascript - 使用文件类型输入时将控制更改为未控制
- awk - awk:对列的子集执行算术并打印具有修改值的所有列
- python-3.x - 如何从字符串中删除某些字母?