根据其他单元格值更改多个单元格值 [英] Change multiple cell values based on other cell value(s)

查看:87
本文介绍了根据其他单元格值更改多个单元格值的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我想根据下一个单元格中给出的状态将包含moving的单元格更改为movingToOpenmovingToClose.

I want to change the cells which contain moving to movingToOpenor movingToClose based on the status given in the next cell(s).

有时循环会中断,并且不会从open移至close或从close移至open

Sometimes the cycle gets interrupted and doesn't move from open to close or close to open

这是我当前的数据框:

                   DateTime  moving
id                                 
36  2018-11-12 15:06:02.487    open
37  2018-11-12 15:06:03.691  moving
38  2018-11-12 15:06:05.505  moving
39  2018-11-12 15:06:08.622   close
40  2018-11-12 15:06:09.023   close
41  2018-11-12 15:06:09.931   close
42  2018-11-12 15:06:11.944  moving
43  2018-11-12 15:06:13.756  moving
44  2018-11-12 15:06:15.168  moving
45  2018-11-12 15:06:18.388   close
46  2018-11-12 15:06:20.100  moving
47  2018-11-12 15:06:23.316  moving
48  2018-11-12 15:06:25.730    open
49  2018-11-12 15:06:26.637    open
50  2018-11-12 15:06:27.644    open
51  2018-11-12 15:06:28.550    open
52  2018-11-12 15:06:28.855    open
53  2018-11-12 15:06:29.356    open
54  2018-11-12 15:06:30.563    open
55  2018-11-12 15:06:31.369  moving
56  2018-11-12 15:06:32.575  moving
57  2018-11-12 15:06:35.593   close

我希望它看起来像这样:

and i want it to look like this:

                   DateTime  moving
id                                 
36  2018-11-12 15:06:02.487    open
37  2018-11-12 15:06:03.691  movingToClose
38  2018-11-12 15:06:05.505  movingToClose
39  2018-11-12 15:06:08.622   close
40  2018-11-12 15:06:09.023   close
41  2018-11-12 15:06:09.931   close
42  2018-11-12 15:06:11.944  movingToClose
43  2018-11-12 15:06:13.756  movingToClose
44  2018-11-12 15:06:15.168  movingToClose
45  2018-11-12 15:06:18.388   close
46  2018-11-12 15:06:20.100  movingToOpen
47  2018-11-12 15:06:23.316  movingToOpen
48  2018-11-12 15:06:25.730    open
49  2018-11-12 15:06:26.637    open
50  2018-11-12 15:06:27.644    open
51  2018-11-12 15:06:28.550    open
52  2018-11-12 15:06:28.855    open
53  2018-11-12 15:06:29.356    open
54  2018-11-12 15:06:30.563    open
55  2018-11-12 15:06:31.369  movingToClose
56  2018-11-12 15:06:32.575  movingToClose
57  2018-11-12 15:06:35.593   close

我尝试过将其转换为数字并使用np.ediff1d的方法,但这仅使它发生在一行上,在我看来,这是一种更简单的方法.

i've tried things where i converted it to numbers and used np.ediff1d but that only makes it happen for one row and it seemse to me there is an easier way.

推荐答案

首先使用moving值转换为NaN /pandas.Series.mask.html"rel =" nofollow noreferrer> mask ,回填最后一个不丢失的值,并添加到由mask过滤的原始值:

First convert moving values to NaN with mask, back filling last non missing values and add to original values filtered by mask:

m = df['moving'] == 'moving'
df.loc[m, 'moving'] = 'movingTo' + df['moving'].mask(m).bfill()
print (df)
                   DateTime         moving
36  2018-11-12 15:06:02.487           open
37  2018-11-12 15:06:03.691  movingToclose
38  2018-11-12 15:06:05.505  movingToclose
39  2018-11-12 15:06:08.622          close
40  2018-11-12 15:06:09.023          close
41  2018-11-12 15:06:09.931          close
42  2018-11-12 15:06:11.944  movingToclose
43  2018-11-12 15:06:13.756  movingToclose
44  2018-11-12 15:06:15.168  movingToclose
45  2018-11-12 15:06:18.388          close
46  2018-11-12 15:06:20.100   movingToopen
47  2018-11-12 15:06:23.316   movingToopen
48  2018-11-12 15:06:25.730           open
49  2018-11-12 15:06:26.637           open
50  2018-11-12 15:06:27.644           open
51  2018-11-12 15:06:28.550           open
52  2018-11-12 15:06:28.855           open
53  2018-11-12 15:06:29.356           open
54  2018-11-12 15:06:30.563           open
55  2018-11-12 15:06:31.369  movingToclose
56  2018-11-12 15:06:32.575  movingToclose
57  2018-11-12 15:06:35.593          close

这篇关于根据其他单元格值更改多个单元格值的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆