2016-08-09 29 views
2

我從下面的熊貓數據框開始,我希望每天都進行分組,並創建一個名爲'label'的新列,它用一個連續的數字標記組。我該怎麼做呢?如何爲熊貓羣分配一個順序標籤?

df = pd.DataFrame({'val': [10,40,30,10,11,13]}, index=pd.date_range('2016-01-01 00:00:00', periods=6, freq='12H')) 
# df['label'] = df.groupby(pd.TimeGrouper('D')) # what do i do here??? 
print df 

輸出:

     val 
2016-01-01 00:00:00 10 
2016-01-01 12:00:00 40 
2016-01-02 00:00:00 30 
2016-01-02 12:00:00 10 
2016-01-03 00:00:00 11 
2016-01-03 12:00:00 13 

所需的輸出:

    val label 
2016-01-01 00:00:00 10 1 
2016-01-01 12:00:00 40 1 
2016-01-02 00:00:00 30 2 
2016-01-02 12:00:00 10 2 
2016-01-03 00:00:00 11 3 
2016-01-03 12:00:00 13 3 
+0

僅供參考,我需要因爲'sklearn.cross_validation.LabelKFold' –

回答

4

試試這個:

df = pd.DataFrame({'val': [10,40,30,10,11,13]}, index=pd.date_range('2016-01-01 00:00:00', periods=6, freq='12H')) 

如果你只是想按日期:

df['label'] = df.groupby(df.index.date).grouper.group_info[0] + 1 
print(df) 

要由時間組更普遍,你可以用TimeGrouper:

df['label'] = df.groupby(pd.TimeGrouper('D')).grouper.group_info[0] + 1 
print(df) 

上面兩種情況,應該給你以下幾點:

     val label 
2016-01-01 00:00:00 10  1 
2016-01-01 12:00:00 40  1 
2016-01-02 00:00:00 30  2 
2016-01-02 12:00:00 10  2 
2016-01-03 00:00:00 11  3 
2016-01-03 12:00:00 13  3 

我認爲這是無證(或難至少找到)。退房:

Get group id back into pandas dataframe

更多的討論。

0

也許更簡單,直觀的方法是這樣的:

df['label'] = df.groupby(df.index.day).keys 
+0

,這一切與'pd.TimeGrouper()'壽這項工作?我確實需要更廣義的版本,以防我一次2或5天分組 –