私は次のようなデータフレームを持っています(私のものは非常に大きいことを除いて):
user1 user2 day hour quantity
-------------------------------------
Alice Bob 1 12 250
Alice Bob 1 13 250
Bob Carol 1 10 20
Alice Bob 4 1 600
.
.
.
...次に、次の groupby と集計 ( by user1
、user2
およびday
)を取得するとします。
user1 user2 day quantity
---------------------
Alice Bob 1 500
4 600
Bob Carol 1 20
3 100
1 日は0 ~ 364 (365 日) です。私が欲しいのは、ゼロがカウントされないことを除いて、すべての日の各ユーザーのカウントの四分位範囲 (および中央値) です。
除外されたすべての日に明示的なゼロがあれば、人生はもっと楽だったでしょう:
user1 user2 day quantity
---------------------
Alice Bob 1 500
2 0
3 0
4 600
.....
Bob Carol 1 20
2 0
3 100
...
...それならできますdf.reset_index().agg({'quantity':scipy.stats.iqr})
が、非常に大きなデータフレーム(上記の例はダミーです)で作業しているため、ゼロでの再インデックスは不可能です。
私はそれを行う方法を知っています: 365 日があることを知っているので、残りの数字をゼロで埋める必要があります:
Alice-Bob: [500,600] + (365-2) * [0]
scipy.stats.iqr
その(および中央値)を取得します。ただし、これにはすべてのuser1-user2
ペアの反復が含まれます。経験上、かなり時間がかかります。
これに対するベクトル化されたソリューションはありますか? また、中央値も取得する必要があり、同じアプローチが維持されるべきだと思います。