回答編集履歴

1

コード変更

2024/09/11 23:42

投稿

bsdfan
bsdfan

スコア4774

test CHANGED
@@ -1,11 +1,10 @@
1
1
  その時間が含まれるかどうかを bool で持っておいて、id毎に or をとる形にすれば、重複カウントされなくなります。最後に合計をとればほしいデータが得られるかと思います。
2
2
 
3
- boolデータを作るには、`explode` を使うよりも最初に最小値と最大値からSeriesを作ってしまったほうが簡単にできると思います。
3
+ boolデータを作るには、`explode` を使うよりも最初に最小値と最大値からSeriesを作ってしまったほうが簡単にできると思います。
4
4
  ```python
5
- ts = pd.date_range(df['start'].min().floor('h'), df['end'].max(), freq='h')
5
+ ts = pd.date_range(df['start'].min().floor('h'), df['end'].max(), freq='h').to_series()
6
6
  result = df.apply(
7
- lambda x: pd.Series((x['start'].floor('h') <= ts) & (ts <= x['end']), index=ts),
7
+ lambda x: (x['start'].floor('h') <= ts) & (ts <= x['end']), axis=1
8
- axis=1
9
8
  ).groupby(df['id']).any().sum()
10
9
  print(result)
11
10
  ```