Определение значения ячейки на основе предыдущего / следующего значения (ячеек) - PullRequest
0 голосов
/ 30 ноября 2018

Это продолжение моего предыдущего поста: Изменение нескольких значений ячеек на основе значений других ячеек

так выглядит обычный цикл объектакак:

                   DateTime  limitswitchopen  limitswitchclose  safetyedgeclose  safetyedgeopen  photocells  traploopext  rectloopext         moving                  comment
0   2018-11-12 15:04:46.861                0                 1                0               0           0            0            0          close                      NaN
1   2018-11-12 15:04:57.149                0                 1                0               0           0            0            0          close                      NaN
2   2018-11-12 15:05:05.046                0                 1                0               0           0            0            0          close                  Normaal
3   2018-11-12 15:05:06.859                0                 0                0               0           0            0            0   movingToopen                  Normaal
4   2018-11-12 15:05:10.080                0                 0                0               0           0            0            0   movingToopen                  Normaal
5   2018-11-12 15:05:11.801                1                 0                0               0           0            0            0           open                  Normaal
6   2018-11-12 15:05:13.409                1                 0                0               0           0            0            0           open                  Normaal
7   2018-11-12 15:05:17.142                1                 0                0               0           0            1            0           open                  Normaal
8   2018-11-12 15:05:18.754                1                 0                0               0           0            1            0           open                  Normaal
9   2018-11-12 15:05:19.055                1                 0                0               0           0            0            1           open                  Normaal
10  2018-11-12 15:05:19.763                1                 0                0               0           0            0            1           open                  Normaal
11  2018-11-12 15:05:20.367                1                 0                0               0           0            0            0           open                  Normaal
12  2018-11-12 15:05:21.575                0                 0                0               0           0            0            0  movingToclose                  Normaal
13  2018-11-12 15:05:23.385                0                 0                0               0           0            0            0  movingToclose                  Normaal
14  2018-11-12 15:05:26.505                0                 1                0               0           0            0            0          close                  Normaal
15  2018-11-12 15:05:26.906                0                 1                0               0           0            0            0          close                      NaN

Мне нужно знать, в каком направлении движется объект.Так что я сделал

df['moving] = df[(df.limitswitchclose == 0) & (df.limitswitchopen == 0)] df['open'] = df[(dfsamen.limitswitchclose == 0) & (df.limitswitchopen == 1)] df['close'] = df[(dfsamen.limitswitchclose == 1) & (df.limitswitchopen == 0)]

, который я слил в один столбец, а затем сделал предыдущий пост.а затем я использовал этот код для создания кадра данных выше, где показано направление.Который работает в этом случае.Но когда цикл прерывается, направление меняется в зависимости от прерывания во время открытия / закрытия.

                   DateTime  limitswitchopen  limitswitchclose  safetyedgeclose  safetyedgeopen  photocells  traploopext  rectloopext         moving                  comment
41  2018-11-12 15:06:09.931                0                 1                0               0           0            0            0          close             Fotocellopen
42  2018-11-12 15:06:11.944                0                 0                0               0           0            0            0  movingToclose             Fotocellopen
43  2018-11-12 15:06:13.756                0                 0                0               0           1            0            0  movingToclose             Fotocellopen
44  2018-11-12 15:06:15.168                0                 0                0               0           0            0            0  movingToclose             Fotocellopen
45  2018-11-12 15:06:18.388                0                 1                0               0           0            0            0          close             Fotocellopen
46  2018-11-12 15:06:20.100                0                 0                0               0           0            0            0   movingToopen             Fotocellopen
47  2018-11-12 15:06:23.316                0                 0                0               0           0            0            0   movingToopen             Fotocellopen
48  2018-11-12 15:06:25.730                1                 0                0               0           0            0            0           open             Fotocellopen
49  2018-11-12 15:06:26.637                1                 0                0               0           0            0            0           open             Fotocellopen
50  2018-11-12 15:06:27.644                1                 0                0               0           0            1            0           open             Fotocellopen
51  2018-11-12 15:06:28.550                1                 0                0               0           0            1            1           open             Fotocellopen
52  2018-11-12 15:06:28.855                1                 0                0               0           0            0            1           open             Fotocellopen
53  2018-11-12 15:06:29.356                1                 0                0               0           0            0            0           open             Fotocellopen
54  2018-11-12 15:06:30.563                1                 0                0               0           0            0            0           open             Fotocellopen
55  2018-11-12 15:06:31.369                0                 0                0               0           0            0            0  movingToclose             Fotocellopen
56  2018-11-12 15:06:32.575                0                 0                0               0           0            0            0  movingToclose             Fotocellopen
57  2018-11-12 15:06:35.593                0                 1                0               0           0            0            0          close             Fotocellopen

при 43 2018-11-12 15:06:13.756 photocells = 1 это сделает объект закрытым, а затем снова начнет открываться.

Итак, каким должен быть этот фрейм данных:

                   DateTime  limitswitchopen  limitswitchclose  safetyedgeclose  safetyedgeopen  photocells  traploopext  rectloopext         moving                  comment
41  2018-11-12 15:06:09.931                0                 1                0               0           0            0            0          close             Fotocellopen
42  2018-11-12 15:06:11.944                0                 0                0               0           0            0            0   movingToopen             Fotocellopen
43  2018-11-12 15:06:13.756                0                 0                0               0           1            0            0   movingToopen             Fotocellopen
44  2018-11-12 15:06:15.168                0                 0                0               0           0            0            0  movingToclose             Fotocellopen
45  2018-11-12 15:06:18.388                0                 1                0               0           0            0            0          close             Fotocellopen
46  2018-11-12 15:06:20.100                0                 0                0               0           0            0            0   movingToopen             Fotocellopen
47  2018-11-12 15:06:23.316                0                 0                0               0           0            0            0   movingToopen             Fotocellopen
48  2018-11-12 15:06:25.730                1                 0                0               0           0            0            0           open             Fotocellopen
49  2018-11-12 15:06:26.637                1                 0                0               0           0            0            0           open             Fotocellopen
50  2018-11-12 15:06:27.644                1                 0                0               0           0            1            0           open             Fotocellopen
51  2018-11-12 15:06:28.550                1                 0                0               0           0            1            1           open             Fotocellopen
52  2018-11-12 15:06:28.855                1                 0                0               0           0            0            1           open             Fotocellopen
53  2018-11-12 15:06:29.356                1                 0                0               0           0            0            0           open             Fotocellopen
54  2018-11-12 15:06:30.563                1                 0                0               0           0            0            0           open             Fotocellopen
55  2018-11-12 15:06:31.369                0                 0                0               0           0            0            0  movingToclose             Fotocellopen
56  2018-11-12 15:06:32.575                0                 0                0               0           0            0            0  movingToclose             Fotocellopen
57  2018-11-12 15:06:35.593                0                 1                0               0           0            0            0          close             Fotocellopen

Итак, мне нужен способ определить, открывается ли объект или закрывается.Если limitSwitchClose изменяется от 1 до 0, он всегда будет открываться, а если limitwitchpen открывается от 1 до 0, он всегда будет закрываться.Но, основываясь на других столбцах в df, он может изменить направление.Если safetyedgeopen = 1 во время открытия, он снова закроется.Но если traploopext = 1 во время открытия, оно продолжит открываться.

Как мне решить эту проблему?

(я продолжу пытаться решить его и опубликую свой ответ, если он будет работать, я могу привести больше примеров того, как я хочу, чтобы датафрейм выглядел, но пост становился длинным)

1 Ответ

0 голосов
/ 30 ноября 2018

Если я понимаю, что вы в основном спрашиваете, это «как мне присвоить значение на основе значения предыдущего ряда».Я бы сделал это, просто сдвинув условие фильтрации на одну строку.Я не буду давать решение для всех вариантов, но вы можете просто соответствующим образом расширить условия фильтрации.

эта строка кода фильтрует, где соседняя строка будет иметь значение 1 в фотоэлементах, и если это так, то заменяет текущие строки "tomoving" на "toclosing" или "toclosing", чтобы"tomoving"

df.loc[df.shift(1).photocells==1,'moving'] = df.loc[df.shift(1).photocells==1,'moving'].str.replace('Toclose','To_open').str.replace('Toopen','To_close').str.replace('_','')

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...