熊猫MultiIndex聚合

时间:2017-10-11 12:53:21

标签: python python-2.7 pandas

我正在尝试根据pandas.date_range生成的DataFrame对多索引DatetimeIndex进行一些聚合。

我的DatetimeIndex看起来像这样:

DatetimeIndex(['2000-05-30', '2000-05-31', '2000-06-01' ... '2001-1-31'])

我的多索引DateFrame看起来像这样:

                     value
date          id    
2000-05-31    1        0
              2        1                   
              3        1
2000-06-30    2        1
              3        0
              4        0
2000-07-30    2        1
              4        0
              1        0
2002-09-30    1        1
              3        1

DatetimeIndex中的日期可能会或可能不会出现在日期索引中

我需要检索所有id,以使value==1的百分比大于或等于某个小数阈值,例如对于0.6的日期位于id的所有行,DatetimeIndex

例如,如果阈值为0.5,则输出应为[2, 3]或某些包含DataFrame2的{​​{1}}。

3不符合要求,因为1不在2002-09-30

我有一个包含循环和dictonaries的解决方案,可以跟踪每个id DatetimeIndex的频率,但运行速度非常慢。

如何利用value==1执行此聚合?

谢谢。

1 个答案:

答案 0 :(得分:1)

您可以使用:

#define range
rng = pd.date_range('2000-05-30', '2000-7-01')

#filtering with isin
df = df[df.index.get_level_values('date').isin(rng)]

#get all treshes
s = df.groupby('id')['value'].mean()
print (s)
id
1    0.0
2    1.0
3    0.5
4    0.0
Name: value, dtype: float64

#get all values of index by tresh
a = s.index[s >= 0.5].tolist()
print (a)
[2, 3]