加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Python > 正文

python – 在pandas系列中使用前一个“行”的值

发布时间:2020-12-16 22:46:32 所属栏目:Python 来源:网络整理
导读:我有一个看起来像这样的CSV(当带入带有的pandas Dataframe时) read_csv(),它看起来一样). 我想根据以下逻辑更新列ad_requests中的值: 对于给定的行,如果ad_requests具有值,请不管它.否则,请为ad_requests的前一行值减去上一行的展示值.所以在第一个例子中,

我有一个看起来像这样的CSV(当带入带有的pandas Dataframe时)
read_csv(),它看起来一样).

enter image description here

我想根据以下逻辑更新列ad_requests中的值:

对于给定的行,如果ad_requests具有值,请不管它.否则,请为ad_requests的前一行值减去上一行的展示值.所以在第一个例子中,我们希望最终得到:

enter image description here

我部分到了那里:

df["ad_requests"] = [i if not pd.isnull(i) else ??? for i in df["ad_requests"]]

这就是我陷入困境的地方.在其他之后,我想“回去”并访问之前的“行”,但我知道这不是大熊猫的意思.
另外需要注意的是,行总是按行ad_tag_name分组为三个.如果我pd.groupby [“ad_tag_name”],我可以把它变成一个列表并开始切片和索引,但是我认为必须有更好的方法在pandas中做这个(因为有很多东西).

Python:2.7.10

熊猫:0.18.0

最佳答案
你会想做这样的事情:

pd.options.mode.chained_assignment = None #suppresses "SettingWithCopyWarning"
for index,elem in enumerate(df['ad_requests']):
    if pd.isnull(elem):
        df['ad_requests'][index]=df['ad_requests'][index-1]-df['impressions'][index-1]

警告来自于我们正在更改数据框视图的值,这会影响原始数据框.然而,这就是我们希望做的事情,所以它并不关心我们.

(Python 2.7.12和Pandas 0.19.0)

编辑:

更改最后一行代码

df['ad_requests'][index]=df['ad_requests'][index-1]-df['impressions'][index-1]

df.at[index,'ad_requests']=df.at[index-1,'ad_requests']-df.at[index-1,'impressions']

消除了禁止任何警告的需要:

for index,elem in enumerate(df['ad_requests']):
    if pd.isnull(elem):
        df.at[index,'impressions']

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读