【问题标题】:How to sort dataframe where columns are months and rows are years into a single time series?如何将列为月、行为年的数据框排序为单个时间序列?
【发布时间】:2015-02-19 14:49:44
【问题描述】:

我有一个数据框,其中行是从 1880 年到 2014 年的年份,列是从 1 月到 12 月的月度数据。如何对数据进行排序以使我有一个时间序列?即

    1880-1 23
    1880-2 66

等等……

谢谢

最初,我的数据框如下所示:

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

【问题讨论】:

  • 到目前为止你尝试了什么?告诉我们,SO 不是代码制作场所。
  • 就是这样。我做了这么多,很困惑该怎么做。我的意思是我可以采用 c++ 方式并遍历数据框的元素并将其存储并附加到列表中。我只是想知道是否有更优雅的 Python 方式来做到这一点。我什至试图按数据集折叠,但没有任何效果。

标签: python pandas time-series


【解决方案1】:

上面的答案对我有用,谢谢。有两点需要注意:

错别字:月份 = a.index.get_level_values(1).values

应该是:month = s.index.get_level_values(1).values

另外,我有 parse_dates=True,所以我的年份被读取为日期,然后 PeriodIndex 不起作用。当我忽略它时,一切都很好!

【讨论】:

    【解决方案2】:

    首先要做的是将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(而不是 MultiIndex)以供以后分析。

    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
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-04-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-01-24
      • 2022-08-03
      • 1970-01-01
      相关资源
      最近更新 更多