2017-10-11 67 views
1

我想根據從pandas.date_range生成的DatetimeIndex對多指數DataFrame做一些聚合。熊貓多元指數聚合

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含有23

1不符合要求,因爲2002-09-30不在DatetimeIndex中。

我有循環和dictonaries的解決方案來跟蹤多久value==1每個ID,但它運行速度非常慢。

我怎樣才能利用pandas執行此聚集?

謝謝。

回答

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] 
+0

我想我的問題是有點不清楚,但我試圖用一個均值> .6獲得IDS在DATE_RANGE所有日期 – bphi

+0

是的,你是對的。有些事情我不清楚。樣本數據'rng = pd.date_range('2000-05-30','2000-7-01')和範圍'0.5'的期望輸出是什麼? – jezrael

+0

ID 1具有的0在DATE_RANGE日期的平均,平均(ID 2)= 1,平均(ID 3)= 0.5和平均(ID 4)= 0因此,如果閾值是0.5,則輸出應該是' 2,3' – bphi