乗車回数が最も多い時間を見つけるにはどうすればよいですか?

通勤者が車を予約する開始時刻に関するデータセットを以下に示します。したい

  • すべての予約をそれぞれの時間に分割する関数を作成する
  • 予約が最も多い時間 (AM/PM 形式) を見つけます
  • パンダのデータフレームは次のようになります:

    望ましい出力:
    printf("{x} am/pm は予約が最も多い時間です")

    pd.grouper メソッドを試しましたが、エラー 「DatetimeIndex、TimedeltaIndex、または PeriodIndex でのみ有効ですが、'RangeIndex のインスタンスを取得しました」で機能しません。

    これを解決するためにあなたの助けを本当に感謝します, ありがとう!

    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))

    予約ID ライドスタート
    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