回答編集履歴
1
修正
test
CHANGED
@@ -1,10 +1,11 @@
|
|
1
1
|
|
2
2
|
ID毎に、1,2または1,2以外の2種類の日付を昇順にキューで管理することで処理速度はあがると思います。
|
3
|
+
ただし、このコードでも200万行だとデータ分布にもよりますが数分はかかります。
|
3
4
|
```Python
|
4
|
-
|
5
5
|
import pandas as pd
|
6
6
|
from collections import deque
|
7
7
|
from io import StringIO
|
8
|
+
from itertools import product
|
8
9
|
|
9
10
|
s = """date,ID,no
|
10
11
|
2022-01-01,1,1
|
@@ -17,6 +18,12 @@
|
|
17
18
|
"""
|
18
19
|
df = pd.read_csv(StringIO(s), parse_dates=['date'])
|
19
20
|
|
21
|
+
# 2192000 rows
|
22
|
+
#data = product(pd.date_range('2020-01-01','2022-12-31'), range(100), range(20))
|
23
|
+
#df = pd.DataFrame(data=data, columns=['date','ID','no'])
|
24
|
+
|
25
|
+
print(df)
|
26
|
+
|
20
27
|
# 古い日付を削除
|
21
28
|
def remove(q,dt):
|
22
29
|
while len(q) > 0:
|
@@ -27,8 +34,8 @@
|
|
27
34
|
# (同日を除く)対象数を取得
|
28
35
|
def count(q,dt):
|
29
36
|
cnt = len(q)
|
30
|
-
for i in r
|
37
|
+
for i in reversed(q):
|
31
|
-
if (dt -
|
38
|
+
if (dt - i).days >= 1:
|
32
39
|
break
|
33
40
|
cnt -= 1
|
34
41
|
return cnt
|
@@ -55,7 +62,6 @@
|
|
55
62
|
|
56
63
|
|
57
64
|
df = df.sort_values('date')
|
58
|
-
|
59
65
|
que = {} # キー=ID, 値=[1,2以外の日付, 1,2の日付]
|
60
66
|
df['ab'] = df.apply(func, axis=1)
|
61
67
|
print(df)
|
@@ -70,4 +76,3 @@
|
|
70
76
|
6 2022-08-01 1 1 (3, 2)
|
71
77
|
"""
|
72
78
|
```
|
73
|
-
|