我正在尝试根据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]
或某些包含DataFrame
和2
的{{1}}。
3
不符合要求,因为1
不在2002-09-30
。
我有一个包含循环和dictonaries的解决方案,可以跟踪每个id DatetimeIndex
的频率,但运行速度非常慢。
如何利用value==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]