У меня есть некоторые данные следующим образом. Я пытаюсь вычислить значения в столбце 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 |
+----------+---------------------+----------+
df['Time'] = df.groupby('Location')['Date'].diff()
?
Возможный дубликат Изменить первый элемент каждой группы в pandas DataFrame
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
То, что мы можем делать остротами, это безумие!
Простое прямое назначение через loc
также работает: df.loc[df.Location.ne(df.Location.shift()), 'Time bw'] = 0
каков ваш ожидаемый результат