为了账号安全,请及时绑定邮箱和手机立即绑定

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 关注
  • 474 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信