1

私は次のようなデータフレームを持っています(私のものは非常に大きいことを除いて):

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 user1user2および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ペアの反復が含まれます。経験上、かなり時間がかかります。

これに対するベクトル化されたソリューションはありますか? また、中央値も取得する必要があり、同じアプローチが維持されるべきだと思います。

4

1 に答える 1