回答編集履歴
4
修正
test
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
追記の追記
|
2
2
|
--------
|
3
|
-
コメントにて、並べ替えの方法が提示されましたが、想定している並べ替え方と違うため、下記回答ではできません。
|
3
|
+
コメントにて、並べ替えの方法が提示されましたが、想定している並べ替え方と違うため、下記回答ではできないケースがあるかもしれません。
|
4
4
|
|
5
5
|
追記
|
6
6
|
----
|
3
修正の修正
test
CHANGED
@@ -1,6 +1,22 @@
|
|
1
|
+
追記の追記
|
2
|
+
--------
|
3
|
+
コメントにて、並べ替えの方法が提示されましたが、想定している並べ替え方と違うため、下記回答ではできません。
|
4
|
+
|
1
5
|
追記
|
2
6
|
----
|
7
|
+
もとのdfがちゃんと並んでいるわけではなく、こちらで整列の方法も考える必要があるみたいです。できるだけ連番ができるようにしてみました。
|
8
|
+
|
9
|
+
```python
|
10
|
+
df['n'] = df.groupby(['居住地', '勤務地', 'day']).cumcount()
|
11
|
+
df = df.sort_values(['居住地', '勤務地', 'n', 'day']).drop(columns='n')
|
12
|
+
|
13
|
+
consecutive = ((df['居住地'] == df['居住地'].shift(1))
|
14
|
+
& (df['勤務地'] == df['勤務地'].shift(1))
|
15
|
+
& (df['day'] - df['day'].shift(1) == 1))
|
16
|
+
|
17
|
+
df['uniqueid'] = (~consecutive).cumsum()
|
18
|
+
```
|
3
|
-
|
19
|
+
元の回答とは、ソートの方法を変えただけです。(コード省略のため、uniquid は連番のままです)
|
4
20
|
|
5
21
|
元の回答
|
6
22
|
---------
|
2
修正
test
CHANGED
@@ -1,20 +1,6 @@
|
|
1
1
|
追記
|
2
2
|
----
|
3
|
-
もとのdfがちゃんと並んでいるわけではなく、こちらで整列の方法も考える必要があるみたいです。
|
4
|
-
できるだけ連番ができるようにしてみました。
|
5
|
-
|
6
|
-
```python
|
7
|
-
df['n'] = df.groupby(['居住地', '勤務地', 'day']).cumcount()
|
8
|
-
df = df.sort_values(['居住地', '勤務地', 'n', 'day']).drop(columns='n')
|
9
|
-
|
10
|
-
consecutive = ((df['居住地'] == df['居住地'].shift(1))
|
11
|
-
& (df['勤務地'] == df['勤務地'].shift(1))
|
12
|
-
& (df['day'] - df['day'].shift(1) == 1))
|
13
|
-
|
14
|
-
df['uniqueid'] = (~consecutive).cumsum()
|
15
|
-
```
|
16
|
-
|
3
|
+
コメントにて、並べ替えの方法が提示されましたが、想定している並べ替え方と違うため、下記回答ではできません。
|
17
|
-
|
18
4
|
|
19
5
|
元の回答
|
20
6
|
---------
|
1
ソートの変更
test
CHANGED
@@ -1,3 +1,23 @@
|
|
1
|
+
追記
|
2
|
+
----
|
3
|
+
もとのdfがちゃんと並んでいるわけではなく、こちらで整列の方法も考える必要があるみたいです。
|
4
|
+
できるだけ連番ができるようにしてみました。
|
5
|
+
|
6
|
+
```python
|
7
|
+
df['n'] = df.groupby(['居住地', '勤務地', 'day']).cumcount()
|
8
|
+
df = df.sort_values(['居住地', '勤務地', 'n', 'day']).drop(columns='n')
|
9
|
+
|
10
|
+
consecutive = ((df['居住地'] == df['居住地'].shift(1))
|
11
|
+
& (df['勤務地'] == df['勤務地'].shift(1))
|
12
|
+
& (df['day'] - df['day'].shift(1) == 1))
|
13
|
+
|
14
|
+
df['uniqueid'] = (~consecutive).cumsum()
|
15
|
+
```
|
16
|
+
元の回答とは、ソートの方法を変えただけです。(コード省略のため、uniquid は連番のままです)
|
17
|
+
|
18
|
+
|
19
|
+
元の回答
|
20
|
+
---------
|
1
21
|
質問やコメントにある、同じ uniqueid を割り振る条件がちょっと曖昧なので、勝手な想像で
|
2
22
|
- もとの df を [居住地, 勤務地] で stable なソートをしたデータで、
|
3
23
|
- 居住地、勤務地が同じで、day が連番になっているかたまり
|