我正在尝试根据从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
的某些3
。1
不符合要求,因为2002-09-30
不在DatetimeIndex
中。我有一个使用循环和字典的解决方案来跟踪每个id的
value==1
频率,但是它运行非常缓慢。如何使用
pandas
进行聚合?谢谢。
最佳答案
您可以使用:
#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]
关于python - Pandas 多索引聚合,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/46688704/