根据其他单元格值更改多个单元格值 [英] Change multiple cell values based on other cell value(s)
问题描述
我想根据下一个单元格中给出的状态将包含moving
的单元格更改为movingToOpen
或movingToClose
.
I want to change the cells which contain moving
to movingToOpen
or 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.
推荐答案
首先使用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屋!