2016-09-25 86 views
1

我有一個數據幀,它是日期索引(d-m-y)。我想創建一個二進制特性列,表示日期是否是本月的第二個星期六。
到目前爲止,我已經得到了這是什麼:在日期索引熊貓數據幀中標記某些日期

def get_second_true(x): 
    second = None 
    for index, is_true in enumerate(x): 
     if is_true and second is None: 
      return index 
     if is_true and second is not None: 
      second = True 

second_saturdays = df.groupby(['month', 'year']).apply(
    lambda x: x.index.weekday == 6 
    ).apply(get_second_true) 

我無法把它恢復成一系列它涉及到原來的數據幀的指數以這樣的方式,每行都有一個標籤,無論是是否是第二個星期六。

這感覺就像一個常見的情景,但我無法找到用於做這種事情的術語。我看過unstackreset_index,但我不明白他們是否有足夠的深度來了解是否可以使用它們,或者甚至需要多級索引。

+0

我認爲R社區可能知道這是什麼,因爲數據幀在那裏很安靜。 – theSage

回答

3

有在大熊貓一個特殊頻率等WOM-2SUN(星期-OF-月:第二個星期日),這樣你就可以這樣來做:

In [88]: df = pd.DataFrame({'date':pd.date_range('2000-01-01', periods=365)}) 

In [89]: df 
Out[89]: 
      date 
0 2000-01-01 
1 2000-01-02 
2 2000-01-03 
3 2000-01-04 
4 2000-01-05 
5 2000-01-06 
6 2000-01-07 
7 2000-01-08 
8 2000-01-09 
9 2000-01-10 
..   ... 
355 2000-12-21 
356 2000-12-22 
357 2000-12-23 
358 2000-12-24 
359 2000-12-25 
360 2000-12-26 
361 2000-12-27 
362 2000-12-28 
363 2000-12-29 
364 2000-12-30 

[365 rows x 1 columns] 

In [90]: df.loc[df.date.isin(pd.date_range(start=df.date.min(), end=df.date.max(), freq='WOM-2SUN'))] 
Out[90]: 
      date 
8 2000-01-09 
43 2000-02-13 
71 2000-03-12 
99 2000-04-09 
134 2000-05-14 
162 2000-06-11 
190 2000-07-09 
225 2000-08-13 
253 2000-09-10 
281 2000-10-08 
316 2000-11-12 
344 2000-12-10 

UPDATE:從熊貓0.20.1 the .ix indexer is deprecated, in favor of the more strict .iloc and .loc indexers開始。

2

一天是第二月份的星期六如果平日== 6和天蛾> 7和月的一天的< = 14

+0

這解決了我的問題,謝謝。我想問一下我定義的操作類型是否有特定的名稱。假設你想在分組數據框中標記第n個事件的發生。 – theSage