首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Python在满足条件之前从行复制值

Python在满足条件之前从行复制值
EN

Stack Overflow用户
提问于 2022-03-29 07:47:54
回答 1查看 50关注 0票数 0

我确实有以下数据:

代码语言:javascript
复制
             A    B
Date
2019-11-04   0    0
2019-11-05   0    0
2019-11-06   1   -2.197387
2019-11-07   1   -2.203836
2019-11-08   1   -2.208839
2019-11-09  -1   -2.207335
2022-11-10  -1   -0.968055
2022-11-11  -1   -0.971627
2022-11-12   0    0
2022-11-13   1   -0.974535
2022-11-14   1   -0.972994

我期待的是以下几点:

代码语言:javascript
复制
             A    B
Date
2019-11-04   0    0
2019-11-05   0    0
2019-11-06   1   -2.197387
2019-11-07   1   -2.197387
2019-11-08   1   -2.197387
2019-11-09  -1   -2.207335
2022-11-10  -1   -2.207335
2022-11-11  -1   -2.207335
2022-11-12   0    0
2022-11-13   1   -0.974535
2022-11-14   1   -0.974535

我尝试了..loc 1和..loc 1,条件是.iloc或.iloc必须是!=0,但在这两种情况下,0只是复制到下一行。

EN

回答 1

Stack Overflow用户

发布于 2022-03-29 07:49:17

使用GroupBy.pipeGroupBy.first,将A的连续值与Series.cumsum的移位值进行比较

代码语言:javascript
复制
df['B'] = df.groupby(df.A.ne(df.A.shift()).cumsum())['B'].transform('first')
print (df)
            A         B
Date                   
2019-11-04  0  0.000000
2019-11-05  0  0.000000
2019-11-06  1 -2.197387
2019-11-07  1 -2.197387
2019-11-08  1 -2.197387
2019-11-09 -1 -2.207335
2022-11-10 -1 -2.207335
2022-11-11 -1 -2.207335
2022-11-12  0  0.000000
2022-11-13  1 -0.974535
2022-11-14  1 -0.974535

另一种方法是使用Series.where替换每个连续值的非第一个值,并向前填充缺失的值(如果列中没有缺失值,则使用此方法):

代码语言:javascript
复制
df['B'] = df['B'].where(df.A.ne(df.A.shift())).ffill()
print (df)
            A         B
Date                   
2019-11-04  0  0.000000
2019-11-05  0  0.000000
2019-11-06  1 -2.197387
2019-11-07  1 -2.197387
2019-11-08  1 -2.197387
2019-11-09 -1 -2.207335
2022-11-10 -1 -2.207335
2022-11-11 -1 -2.207335
2022-11-12  0  0.000000
2022-11-13  1 -0.974535
2022-11-14  1 -0.974535
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/71658256

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档