2016-01-21 39 views
2

我的df看起來像這樣,其中'O'是一年的序號。如何在熊貓中獲得「紅衣主教」一天?

  Close O 
Date   
1950-01-03 16.66 3 
1950-01-04 16.85 4 
1950-01-05 16.93 5 
1950-01-06 16.98 6 
1950-01-09 17.08 9 
1950-01-10 17.03 10 
1950-01-11 17.09 11 
1950-01-12 16.76 12 
1950-01-13 16.67 13 
1950-01-16 16.71 16 

我希望在給定數據集的情況下有一年的基數日。理想的結果是:

  Close O C 
Date   
1950-01-03 16.66 3 1 
1950-01-04 16.85 4 2 
1950-01-05 16.93 5 3 
1950-01-06 16.98 6 4 
1950-01-09 17.08 9 5 
1950-01-10 17.03 10 6 
1950-01-11 17.09 11 7 
1950-01-12 16.76 12 8 
1950-01-13 16.67 13 9 
1950-01-16 16.71 16 10 

注:數據集多年長,所以關鍵是重新開始計數每一個有索引新的一年的時間。

感謝

回答

2

爲了使一列是一個運行計數,每年可復位,您可以使用GROUPBY/cumcount:

df['C'] = df.groupby(df.index.year).cumcount(1)+1 

例如,

df = pd.DataFrame({ 
    'Close': [16.66, 16.85, 16.93, 16.98, 17.08, 17.03, 17.09, 16.76, 16.67, 16.71, 20], 
    'Date': ['1950-01-03', '1950-01-04', '1950-01-05', '1950-01-06', '1950-01-09', 
      '1950-01-10', '1950-01-11', '1950-01-12', '1950-01-13', '1950-01-16', 
      '1951-01-01'], }) 
df['Date'] = pd.to_datetime(df['Date']) 
df = df.set_index('Date') 

df['O'] = df.index.day 
df['C'] = df.groupby(df.index.year).cumcount(1)+1 

產量

  Close O C 
Date      
1950-01-03 16.66 3 1 
1950-01-04 16.85 4 2 
1950-01-05 16.93 5 3 
1950-01-06 16.98 6 4 
1950-01-09 17.08 9 5 
1950-01-10 17.03 10 6 
1950-01-11 17.09 11 7 
1950-01-12 16.76 12 8 
1950-01-13 16.67 13 9 
1950-01-16 16.71 16 10 
1951-01-01 20.00 1 1