pd.DatetimeIndex を使用できます
です。そして s.value_counts
を適用します、続いて s.idxmax
:
pandas を pd としてインポート
# いくつかの異なる時間を追加するだけです
data = {'BookingID': {0: 1, 1: 2, 2: 3, 3: 4},
'RideStart': {0: '2022-01-01 00:07:52.943',
1: '2022-01-01 18:09:31.745',
2: '2022-01-01 18:14:37.187',
3: '2022-01-02 19:18:09.127'}}
df = pd.DataFrame(データ)
印刷(df)
BookingID 乗車開始
0 1 2022-01-01 00:07:52.943
1 2 2022-01-01 18:09:31.745
2 3 2022-01-01 18:14:37.187
3 4 2022-01-02 19:18:09.127
max_hour = pd.DatetimeIndex(df['RideStart']).hour.value_counts().idxmax()
print(f'{max_hour%12} {"pm" if max_hour>12 else "am"} は予約が最も多い時間です')
18:00 は予約が最も多い時間帯です
pd.grouper
メソッドは必要ありません。pandas には、Datetime に基づいて値を再サンプリングするためのツールが既に用意されています。問題は、データフレームに現在 Datetime 値がなく、文字列だけがあることです。 <a href="https://cumsum.wordpress.com/2022/02/26/pandas-typeerror-only-valid-with で説明されているように、pd.to_datetime()
メソッドを使用できます。 -datetimeindex-timedeltaindex-or-periodindex-but-got-an-instance-of-index/" rel="nofollow noreferrer">このチュートリアルを使用してから、データを時間にダウンサンプリングします。
>>> a = ['2022-01-01 00:07:52.943',
'2022-01-01 00:09:31.745',
'2022-01-01 01:12:37.187',
'2022-01-01 02:45:42.834',
「2022-01-01 02:56:58.152」]
>>> df = pd.DataFrame(データ=a)
>>> print(df.head())
0
0 2022-01-01 00:07:52.943
1 2022-01-01 00:09:31.745
2 2022-01-01 01:12:37.187
3 2022-01-01 02:45:42.834
4 2022-01-01 02:56:58.152
>>> df.index = pd.to_datetime(df[0])
>>> df.resample('H').count()[0] # [0] は余分なすべてを含む列を取り除くためのものです
0
2022-01-01 00:00:00 2
2022-01-01 01:00:00 1
2022-01-01 02:00:00 2
日付の文字列の長さについて推測できる場合。日付から hr を新しい列に解析し、mode
を取得する次のようなことができます。
数時間かかる場合に備えて、最後に for ループを使用したことに注意してください。
pandas を pd としてインポート
データ = [
['01','2022-01-01 00:07:52.943'],
['02','2022-01-01 00:09:31.745'],
['03','2022-01-01 00:14:37.187'],
['04','2022-01-02 00:18:09.127'],
['05','2022-01-02 00:18:09.130']
]
df = pd.DataFrame(data, columns=['BookingID','RideStart'])
印刷(df)
print('---\n---')
# ソリューションの開始
df['RideStartHr'] = df['RideStart'].str[14:16]
印刷(df)
modeList = df['RideStartHr'].mode().values
print('Mode(s):', modeList)
len(modeList) > 1 の場合:
print('最も頻度の高い時間は{}あります。それらすべてを一覧表示しています。'.format(len(modeList)))
modeList のモード:
hr = int(モード) % 12
ampm = 'am' if mode <= '12' else 'pm'
print('{} {} は最も頻度の高い時間です。'.format(hr, ampm))