我正在尝试根据从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的某些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/

10-09 04:09