我有一个类似的数据框(除了我的非常大):
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
一天应该从 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
对。根据经验,这需要很多时间。
对此有任何矢量化解决方案吗?我也必须得到中位数,我认为同样的方法应该成立。