2015-11-12 122 views
1

所以我想要做的是重新索引一個DataFrame框架內有一堆單獨的組。每個人都有自己的索引,我想添加一個End of Month索引。我認爲,一個例子是最好的:Reindexing熊貓按時間分組

鑑於這一數據框:

In [72]: a = {'2014-01-02': {'A': 1}, '2014-02-03': {'A': 1}, '2014-03-05': {'A': 1}} 

In [74]: b = {'2015-01-02': {'A': 2}, '2015-02-03': {'A': 2}, '2015-03-05': {'A': 2}} 
In [76]: pd.DataFrame.from_dict(a,orient='index').append(pd.DataFrame.from_dict(b,orient='index')) 
Out[76]: 
      A 
2014-01-02 1 
2014-02-03 1 
2014-03-05 1 
2015-01-02 2 
2015-02-03 2 
2015-03-05 2 

(注意:2014 VS 2015)

我想借此在「A」列兩組,並重新編制各在索引的最大值之後從最小值到最後月份包括每個組的月末。我希望輸出像這樣:

  A 
2014-01-02 1 
2014-01-31 1 
2014-02-03 1 
2014-02-28 1 
2014-03-05 1 
2014-03-31 1 
2015-01-02 2 
2015-01-31 2 
2015-02-03 2 
2015-02-28 2 
2015-03-05 2 
2015-03-31 2 
+0

你會想在你的數據框上使用「多索引」。在熊貓文檔中查看「多指標」將是一個很好的起點。 –

回答

1
In [59]: 
df.index = pd.to_datetime(df.index , format = '%Y-%m-%d') 
df 
Out[59]: 
      A 
2014-01-02 1 
2014-02-03 1 
2014-03-05 1 
2015-01-02 2 
2015-02-03 2 
2015-03-05 2 

In [61]: 
month_end = df.resample('M').dropna() 
month_end 
Out[61]: 
      A 
2014-01-31 1 
2014-02-28 1 
2014-03-31 1 
2015-01-31 2 
2015-02-28 2 
2015-03-31 2 

In [64]: 
pd.concat([df , month_end]).sortlevel(0) 
Out[64]: 
      A 
2014-01-02 1 
2014-01-31 1 
2014-02-03 1 
2014-02-28 1 
2014-03-05 1 
2014-03-31 1 
2015-01-02 2 
2015-01-31 2 
2015-02-03 2 
2015-02-28 2 
2015-03-05 2 
2015-03-31 2 
+0

我接受了這個,但也遇到了一個問題。如果你在同一個月有兩個,現在使用A的平均值。有沒有辦法讓它在這種情況下創建兩個條目,一個是1,一個是2? – user1610719

+0

如果你在同一個月有兩個,你是什麼意思? –

+0

如果A == 1具有2015-02-04並且A == 2在索引中具有2015-02-05 – user1610719

0

首先,讓你的數據幀的別名

df = pd.DataFrame.from_dict(a,orient='index').append(pd.DataFrame.from_dict(b,orient='index')) 

接下來,行名稱恢復爲指數目前

df.reset_index(level=0, inplace=True) 

,請檢查您的數據幀的索引

list(df.columns.values) 

這是現在多i-indexed,因此「A」是一個索引,聚合函數將根據該附加索引級別進行操作。