2014-12-21 51 views
-3

我有一個數據框,其中行是從1880年到2014年的年份,列是從1月到12月的月度數據。我如何對數據進行排序,以便我有單個時間序列?即如何將列爲月份和行的年份的數據框排序爲單個時間序列?

1880-1 23 
    1880-2 66 

等等

感謝

最初,我的數據幀是這樣的:

  jan, feb, mar, apl 
    1880 23 66... 
+0

你到目前爲止嘗試了什麼?告訴我們,SO不是代碼製作的地方。 – GLHF

+0

這就是事情。我做了這麼多事,並且很困惑該怎麼做。我的意思是我可以去C++的方式,遍歷數據框的元素並存儲並追加到列表中。我只是想知道是否有一個更優雅的pythonistic方式來做到這一點。我甚至試圖通過數據集崩潰,但沒有任何工作。 –

回答

1

要做的第一件事是jan, feb, mar, ..., dec轉換爲1, 2, 3, ..., 12。現在

df.columns = range(1, 13) 

您可以使用stack

In [11]: df = pd.DataFrame([[23, 66, 42], [11, 14, 15]], index=[1880, 1881], columns=[1, 2, 3]) 

In [12]: df 
Out[12]: 
     1 2 3 
1880 23 66 42 
1881 11 14 15 

In [13]: df.stack() 
Out[13]: 
1880 1 23 
     2 66 
     3 42 
1881 1 11 
     2 14 
     3 15 
dtype: int64 

注意:你可能更喜歡PeriodIndex(而不是一個多指標),以供日後分析。

In [21]: s = df.stack() 
     year = s.index.get_level_values(0).values 
     month = a.index.get_level_values(1).values 

In [22]: pd.PeriodIndex(year=year, month=month, freq='M') 
Out[22]: 
<class 'pandas.tseries.period.PeriodIndex'> 
[1880-01, ..., 1881-03] 
Length: 6, Freq: M 

In [23]: s.index = pd.PeriodIndex(year=year, month=month, freq='M') 

In [24]: s 
Out[24]: 
1880-01 23 
1880-02 66 
1880-03 42 
1881-01 11 
1881-02 14 
1881-03 15 
Freq: M, dtype: int64 
0

上面的答案適用於我,謝謝。有兩點需要注意:

錯字:月= a.index.get_level_values(1).values

應該是:月= s.index.get_level_values(1).values

而且,我有parse_dates = True,所以我的年份被作爲日期讀入,然後PeriodIndex不起作用。當我離開時,一切都很好!

相關問題