Pandasを勉強中の者です。
以下、初歩的な内容と思いますが、ご教授願います。
実現したいこと
対象となる基データ
user | start | end |
---|---|---|
AAA | 2024/03/21 10:30:45 | 2024/03/21 13:39:45 |
AAA | 2024/03/21 13:48:32 | 2024/03/21 15:21:12 |
AAA | 2024/03/21 17:18:01 | 2024/03/21 18:56:47 |
BBB | 2024/03/21 12:43:05 | 2024/03/22 09:05:32 |
期待するデータ
datetime | count |
---|---|
2024/03/21 10:00:00 | 1 |
2024/03/21 11:00:00 | 1 |
2024/03/21 12:00:00 | 2 |
2024/03/21 13:00:00 | 2 |
2024/03/21 14:00:00 | 2 |
2024/03/21 15:00:00 | 2 |
2024/03/21 16:00:00 | 1 |
2024/03/21 17:00:00 | 2 |
2024/03/21 18:00:00 | 2 |
2024/03/21 19:00:00 | 1 |
2024/03/21 20:00:00 | 1 |
2024/03/21 21:00:00 | 1 |
2024/03/21 22:00:00 | 1 |
2024/03/21 23:00:00 | 1 |
2024/03/21 24:00:00 | 1 |
2024/03/22 01:00:00 | 1 |
2024/03/22 02:00:00 | 1 |
2024/03/22 03:00:00 | 1 |
2024/03/22 04:00:00 | 1 |
2024/03/22 05:00:00 | 1 |
2024/03/22 06:00:00 | 1 |
2024/03/22 07:00:00 | 1 |
2024/03/22 08:00:00 | 1 |
2024/03/22 09:00:00 | 1 |
基データのstart列とend列の期間から、1時間毎になるようにカウントしたいです。
該当のソースコード
python
1import pandas as pd 2import io 3 4csv_data = """ 5id,start,end 6AAA,2024/03/21 10:30:45,2024/03/21 13:39:45 7AAA,2024/03/21 13:48:32,2024/03/21 15:21:12 8AAA,2024/03/21 17:18:01,2024/03/21 18:56:47 9BBB,2024/03/21 12:43:05,2024/03/22 09:05:32 10""" 11 12df = pd.read_csv(io.StringIO(csv_data), dtype=str) 13df['start'] = pd.to_datetime(df['start']) 14df['end'] = pd.to_datetime(df['end']) 15 16df = df.sort_values('start') 17df = df.apply(lambda x: pd.date_range(x['start'], x['end'], freq='H'), axis=1).explode().value_counts(sort=False) 18df = df.to_frame('count').reset_index(names='datetime') 19df['datetime'] = df['datetime'].dt.round('H') 20df = df[['datetime', 'count']].groupby('datetime').sum() 21print(df)
試したこと
色々試みましたが、期待するデータの通りにならず、下の太字count:3となってしまいます。
同時刻内にユーザが重複しても、カウントされないようにしたいです。
上記コードから出力結果
datetime | count |
---|---|
2024/03/21 10:00:00 | 1 |
2024/03/21 11:00:00 | 1 |
2024/03/21 12:00:00 | 2 |
2024/03/21 13:00:00 | 2 |
2024/03/21 14:00:00 | 3 |
2024/03/21 15:00:00 | 2 |
2024/03/21 16:00:00 | 1 |
2024/03/21 17:00:00 | 2 |
2024/03/21 18:00:00 | 2 |
2024/03/21 19:00:00 | 1 |
2024/03/21 20:00:00 | 1 |
2024/03/21 21:00:00 | 1 |
2024/03/21 22:00:00 | 1 |
2024/03/21 23:00:00 | 1 |
2024/03/21 24:00:00 | 1 |
2024/03/22 01:00:00 | 1 |
2024/03/22 02:00:00 | 1 |
2024/03/22 03:00:00 | 1 |
2024/03/22 04:00:00 | 1 |
2024/03/22 05:00:00 | 1 |
2024/03/22 06:00:00 | 1 |
2024/03/22 07:00:00 | 1 |
2024/03/22 08:00:00 | 1 |
2024/03/22 09:00:00 | 1 |
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。