我有一個數據框,其中行是從1880年到2014年的年份,列是從1月到12月的月度數據。我如何對數據進行排序,以便我有單個時間序列?即如何將列爲月份和行的年份的數據框排序爲單個時間序列?
1880-1 23
1880-2 66
等等
感謝
最初,我的數據幀是這樣的:
jan, feb, mar, apl
1880 23 66...
我有一個數據框,其中行是從1880年到2014年的年份,列是從1月到12月的月度數據。我如何對數據進行排序,以便我有單個時間序列?即如何將列爲月份和行的年份的數據框排序爲單個時間序列?
1880-1 23
1880-2 66
等等
感謝
最初,我的數據幀是這樣的:
jan, feb, mar, apl
1880 23 66...
要做的第一件事是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
上面的答案適用於我,謝謝。有兩點需要注意:
錯字:月= a.index.get_level_values(1).values
應該是:月= s.index.get_level_values(1).values
而且,我有parse_dates = True,所以我的年份被作爲日期讀入,然後PeriodIndex不起作用。當我離開時,一切都很好!
你到目前爲止嘗試了什麼?告訴我們,SO不是代碼製作的地方。 – GLHF
這就是事情。我做了這麼多事,並且很困惑該怎麼做。我的意思是我可以去C++的方式,遍歷數據框的元素並存儲並追加到列表中。我只是想知道是否有一個更優雅的pythonistic方式來做到這一點。我甚至試圖通過數據集崩潰,但沒有任何工作。 –