Python:カテゴリ変数のローリングアワータイムカウント
Oct 04 2020
列のあるパンダデータフレームがあり、それぞれの過去1時間の['DateTime', 'Variable']ローリングカウントを取得しようとしています。思考ピボットはどういうわけか使用できます。Variable
サンプルデータ
DateTime Variable
8/24/19 3:30PM A
8/24/19 3:32PM A
8/24/19 3:36PM B
8/24/19 3:50PM C
8/25/19 2:50PM A
期待される出力
DateTime A B C
8/24/19 3:30PM 1 0 0
8/24/19 3:32PM 2 0 0
8/24/19 3:36PM 2 1 0
8/24/19 3:50PM 2 1 1
8/25/19 2:50PM 1 0 0
新しい変数が追加または削除される可能性があるため、動的なソリューションが必要です。
回答
RichieV Oct 04 2020 at 02:47
実際には、で開始することも、pivotを使用して手動で実行することもできgroupby.unstackます。
次に、多くの関数で集約できるローリングウィンドウdf.rollingを作成することを探しています。タイムデルタ(この場合は1時間)でウィンドウを作成するには、インデックスがタイプであることを確認する必要があります。datetime
df['DateTime'] = pd.to_datetime(df['DateTime'])
out = (
df
.groupby(['DateTime', 'Variable']) # set the columns as index
.size() # aggregate by row count
.unstack(fill_value=0) # move 'Variable' index level to columns
.sort_index()
)
out = out.rolling('1h').sum()
出力
Variable A B C
DateTime
2019-08-24 15:30:00 1.0 0.0 0.0
2019-08-24 15:32:00 2.0 0.0 0.0
2019-08-24 15:36:00 2.0 1.0 0.0
2019-08-24 15:50:00 2.0 1.0 1.0
2019-08-25 14:50:00 1.0 0.0 0.0
PrakritiShaurya Oct 04 2020 at 02:01
dfがデータセットであると考える:new_df = df [df ['Variable'] == 'A']。resample( 'H')。count()
次のように新しいデータフレームを作成できます。final_df= pd.DataFrame({'DateTime':new_df.index、 'A':new_df.values})
同様に、Variable列の各カテゴリのカウントを取得し、ループを使用してfinal_dfに連結してみます。
私はそれを試していませんが、うまくいけばうまくいくでしょう。