Эффективное использование numpy select

У меня есть некоторые данные следующим образом. Я пытаюсь вычислить значения в столбце Time bw (в 4-й строке должно быть 0). Всякий раз, когда Location перемещается на новый, например, a на b, я хочу, чтобы Time bw перезапустился с 0. Я пытаюсь использовать ne , select и diff()

+----------+---------------------+----------+
| Location |         Date        | Time bw  |
+----------+---------------------+----------+
| a        | 2018-06-26 00:00:00 |        0 |
| a        | 2018-06-26 00:00:00 |        0 |
| a        | 2018-06-26 00:00:00 |        0 |
| b        | 2018-08-03 00:00:00 |       38 |
| b        | 2018-08-03 00:00:00 |        0 |
| b        | 2018-08-04 00:00:00 |        1 |
| b        | 2018-08-04 00:00:00 |        0 |
| b        | 2018-08-04 00:00:00 |        0 |
| b        | 2018-08-04 00:00:00 |        0 |
| b        | 2018-08-04 00:00:00 |        0 |
| b        | 2018-08-04 00:00:00 |        0 |
| b        | 2018-08-05 00:00:00 |        1 |
| b        | 2018-08-08 00:00:00 |        3 |
| b        | 2018-08-08 00:00:00 |        0 |
| b        | 2018-08-08 00:00:00 |        0 |
| b        | 2018-08-08 00:00:00 |        0 |
| b        | 2018-08-08 00:00:00 |        0 |
| c        | 2018-08-14 00:00:00 |        6 |
| c        | 2018-08-14 00:00:00 |        0 |
| c        | 2018-08-14 00:00:00 |        0 |
+----------+---------------------+----------+

каков ваш ожидаемый результат

BENY 31.05.2019 02:22
df['Time'] = df.groupby('Location')['Date'].diff()?
Ben Pap 31.05.2019 02:36

Возможный дубликат Изменить первый элемент каждой группы в pandas DataFrame

Mike 31.05.2019 02:42
Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
0
3
68
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

IIUC:

df['Time bw'] = np.where(df.Location.ne(df.Location.shift()), 0, df['Time bw'])

выход:

    Location    Date    Time bw
0   a   20180626 00:00:00   0
1   a   20180626 00:00:00   0
2   a   20180626 00:00:00   0
3   b   20180803 00:00:00   0
4   b   20180803 00:00:00   0
5   b   20180804 00:00:00   1
6   b   20180804 00:00:00   0
7   b   20180804 00:00:00   0
8   b   20180804 00:00:00   0
9   b   20180804 00:00:00   0
10  b   20180804 00:00:00   0
11  b   20180805 00:00:00   1
12  b   20180808 00:00:00   3
13  b   20180808 00:00:00   0
14  b   20180808 00:00:00   0
15  b   20180808 00:00:00   0
16  b   20180808 00:00:00   0
17  c   20180814 00:00:00   0
18  c   20180814 00:00:00   0
19  c   20180814 00:00:00   0

То, что мы можем делать остротами, это безумие!

srkdb 31.05.2019 03:58

Простое прямое назначение через loc также работает: df.loc[df.Location.ne(df.Location.shift()), 'Time bw'] = 0

Andy L. 31.05.2019 04:07

Другие вопросы по теме