回答編集履歴
7
テキスト修正
test
CHANGED
@@ -112,13 +112,13 @@
|
|
112
112
|
|
113
113
|
|
114
114
|
|
115
|
-
|
115
|
+
① 所与のデータフレームの全行について、 `登録時刻`列の日時の日付部分を `1970-01-01` に置き換えた日時を作り、それらに対して `timestamp()` によってエポック秒を取得
|
116
116
|
|
117
|
-
|
117
|
+
② 上記で得られた、全行の秒数の平均値を算出
|
118
118
|
|
119
|
-
|
119
|
+
③ 上記で得られた平均値をエポック秒として日時を作る。
|
120
120
|
|
121
|
-
|
121
|
+
④ 上記で作成した日時の時刻部分が、求めたい平均としての時刻になる。
|
122
122
|
|
123
123
|
|
124
124
|
|
@@ -126,19 +126,21 @@
|
|
126
126
|
|
127
127
|
```python3
|
128
128
|
|
129
|
+
|
130
|
+
|
129
|
-
timestamps = dfres['登録時刻'].apply(lambda dt: dt.replace(year=1970, month=1, day=1).timestamp())
|
131
|
+
timestamps = dfres['登録時刻'].apply(lambda dt: dt.replace(year=1970, month=1, day=1).timestamp()) # ①
|
130
132
|
|
131
133
|
|
132
134
|
|
133
|
-
avg_timestamp = round(timestamps.mean())
|
135
|
+
avg_timestamp = round(timestamps.mean()) # ②
|
134
136
|
|
135
137
|
|
136
138
|
|
137
|
-
avg_date = datetime.datetime.fromtimestamp(avg_timestamp).astimezone(datetime.timezone.utc)
|
139
|
+
avg_date = datetime.datetime.fromtimestamp(avg_timestamp).astimezone(datetime.timezone.utc) # ③
|
138
140
|
|
139
141
|
|
140
142
|
|
141
|
-
print(avg_date.time())
|
143
|
+
print(avg_date.time()) # ④
|
142
144
|
|
143
145
|
```
|
144
146
|
|
6
テキスト修正
test
CHANGED
@@ -126,15 +126,15 @@
|
|
126
126
|
|
127
127
|
```python3
|
128
128
|
|
129
|
-
timestamps = [
|
129
|
+
timestamps = dfres['登録時刻'].apply(lambda dt: dt.replace(year=1970, month=1, day=1).timestamp())
|
130
130
|
|
131
131
|
|
132
132
|
|
133
|
-
avg_s
|
133
|
+
avg_timestamp = round(timestamps.mean())
|
134
134
|
|
135
135
|
|
136
136
|
|
137
|
-
avg_date = datetime.datetime.fromtimestamp(avg_s
|
137
|
+
avg_date = datetime.datetime.fromtimestamp(avg_timestamp).astimezone(datetime.timezone.utc)
|
138
138
|
|
139
139
|
|
140
140
|
|
@@ -144,4 +144,4 @@
|
|
144
144
|
|
145
145
|
|
146
146
|
|
147
|
-
- 動作確認用 Repl.it: [https://repl.it/@jun68ykt/teratail-Q2401532](https://repl.it/@jun68ykt/teratail-Q2401532)
|
147
|
+
- 動作確認用 Repl.it: [https://repl.it/@jun68ykt/teratail-Q240153sample2](https://repl.it/@jun68ykt/teratail-Q240153sample2)
|
5
テキスト修正
test
CHANGED
@@ -144,4 +144,4 @@
|
|
144
144
|
|
145
145
|
|
146
146
|
|
147
|
-
- 動作確認用 Repl.it: [https://repl.it/@jun68ykt/teratail-Q240153
|
147
|
+
- 動作確認用 Repl.it: [https://repl.it/@jun68ykt/teratail-Q2401532](https://repl.it/@jun68ykt/teratail-Q2401532)
|
4
テキスト修正
test
CHANGED
@@ -116,7 +116,9 @@
|
|
116
116
|
|
117
117
|
- 上記で得られた、全行の秒数の平均値を算出
|
118
118
|
|
119
|
+
- 上記で得られた平均値をエポック秒として日時を作る。
|
120
|
+
|
119
|
-
- 上記で
|
121
|
+
- 上記で作成した日時の時刻部分が、求めたい平均としての時刻になる。
|
120
122
|
|
121
123
|
|
122
124
|
|
3
テキスト修正
test
CHANGED
@@ -112,11 +112,11 @@
|
|
112
112
|
|
113
113
|
|
114
114
|
|
115
|
-
- 所与のデータフレームの全行について、 `登録時刻`列の日時の日付部分を `1970-01-01` に置き換えた日時を作り、それに対して `timestamp()` によってエポック秒を取得
|
115
|
+
- 所与のデータフレームの全行について、 `登録時刻`列の日時の日付部分を `1970-01-01` に置き換えた日時を作り、それらに対して `timestamp()` によってエポック秒を取得
|
116
116
|
|
117
|
-
- 上記
|
117
|
+
- 上記で得られた、全行の秒数の平均値を算出
|
118
118
|
|
119
|
-
- 上記で得た
|
119
|
+
- 上記で得られた平均値から日時を作れば、それの時刻部分が求めたい平均としての時刻になる。
|
120
120
|
|
121
121
|
|
122
122
|
|
2
テキスト修正
test
CHANGED
@@ -95,3 +95,51 @@
|
|
95
95
|
|
96
96
|
|
97
97
|
- 動作確認用 Repl.it: [https://repl.it/@jun68ykt/teratail-Q240153](https://repl.it/@jun68ykt/teratail-Q240153)
|
98
|
+
|
99
|
+
|
100
|
+
|
101
|
+
|
102
|
+
|
103
|
+
### 追記
|
104
|
+
|
105
|
+
|
106
|
+
|
107
|
+
上記の回答コードは、補助的な関数の中で、`3600` や `60` という数字を使って、時刻オブジェクトと数値の変換を行っており、煩雑でした。これらを使わない方法を考えたので追記します。
|
108
|
+
|
109
|
+
|
110
|
+
|
111
|
+
考え方としては、
|
112
|
+
|
113
|
+
|
114
|
+
|
115
|
+
- 所与のデータフレームの全行について、 `登録時刻`列の日時の日付部分を `1970-01-01` に置き換えた日時を作り、それに対して `timestamp()` によってエポック秒を取得
|
116
|
+
|
117
|
+
- 上記によって得られた、全行のエポック秒の平均を算出
|
118
|
+
|
119
|
+
- 上記で得たエポック秒の平均値から日時を作れば、それの時刻部分が求めたい平均の時刻になる。
|
120
|
+
|
121
|
+
|
122
|
+
|
123
|
+
以下は上記の考え方によるコードです。
|
124
|
+
|
125
|
+
```python3
|
126
|
+
|
127
|
+
timestamps = [*map(lambda dt: dt.replace(year=1970, month=1, day=1).timestamp(), dfres['登録時刻'])]
|
128
|
+
|
129
|
+
|
130
|
+
|
131
|
+
avg_second = round(np.mean(timestamps))
|
132
|
+
|
133
|
+
|
134
|
+
|
135
|
+
avg_date = datetime.datetime.fromtimestamp(avg_second).astimezone(datetime.timezone.utc)
|
136
|
+
|
137
|
+
|
138
|
+
|
139
|
+
print(avg_date.time())
|
140
|
+
|
141
|
+
```
|
142
|
+
|
143
|
+
|
144
|
+
|
145
|
+
- 動作確認用 Repl.it: [https://repl.it/@jun68ykt/teratail-Q240153_2](https://repl.it/@jun68ykt/teratail-Q2401532)
|
1
テキスト修正
test
CHANGED
@@ -36,17 +36,17 @@
|
|
36
36
|
|
37
37
|
|
38
38
|
|
39
|
-
def time_to_sec(t):
|
39
|
+
def time_to_sec(dt):
|
40
40
|
|
41
41
|
'''
|
42
42
|
|
43
|
-
引数 t で与えられるtimeオブジェクトの示す時
|
43
|
+
引数 dt で与えられるdatetimeオブジェクトの示す日時の
|
44
44
|
|
45
|
-
の経過秒数を返す
|
45
|
+
時刻部分について、0時0分0秒からの経過秒数を返す
|
46
46
|
|
47
47
|
'''
|
48
48
|
|
49
|
-
return 3600 * t.hour + 60 * t.minute + t.second
|
49
|
+
return 3600 * dt.hour + 60 * dt.minute + dt.second
|
50
50
|
|
51
51
|
```
|
52
52
|
|
@@ -58,7 +58,7 @@
|
|
58
58
|
|
59
59
|
```python3
|
60
60
|
|
61
|
-
dfres.loc[:,'時刻(秒)'] = [*map(lambda t: time_to_sec(t), dfres['登録時刻']
|
61
|
+
dfres.loc[:,'時刻(秒)'] = [*map(lambda t: time_to_sec(t), dfres['登録時刻'])]
|
62
62
|
|
63
63
|
```
|
64
64
|
|
@@ -94,4 +94,4 @@
|
|
94
94
|
|
95
95
|
|
96
96
|
|
97
|
-
- 動作確認用 Repl.it: [https://repl.it/@jun68ykt/Q240153](https://repl.it/@jun68ykt/Q240153)
|
97
|
+
- 動作確認用 Repl.it: [https://repl.it/@jun68ykt/teratail-Q240153](https://repl.it/@jun68ykt/teratail-Q240153)
|