【问题标题】:Pandas reshape columns to time-series rowsPandas 将列重塑为时间序列行
【发布时间】:2017-12-05 09:03:47
【问题描述】:

我有一个 pandas 数据框(不满意重复...)

Date        Partner   Value
2017-02-01  Partner1  150
2017-03-01  Partner1  170
2017-02-01  Partner2  160
2017-03-01  Partner2  185
2017-02-01  Partner1  40
2017-03-01  Partner1  90

我想通过合作伙伴重塑,看起来像这样:

Partner    2017-02-01   2017-03-01
Partner1   150          170
Partner2   160          185
Partner1   40           90

我该怎么办?

【问题讨论】:

    标签: python pandas time-series reshape


    【解决方案1】:

    其实我找到了我需要的答案:

    series = pd.pivot_table(data, values="Value", index="Partner", columns="Date")
    

    【讨论】:

      【解决方案2】:

      这是一个替代解决方案:

      来源 DF:

      In [143]: df
      Out[143]:
               Date   Partner  Value
      0  2017-02-01  Partner1    150
      1  2017-02-01  Partner1    199   # NOTE: duplicated `Date` & `Partner`
      2  2017-03-01  Partner1    170
      3  2017-02-01  Partner2    160
      4  2017-03-01  Partner2    185
      

      解决方案:

      In [144]: df.groupby(['Partner','Date'])['Value'].mean().unstack().rename_axis(None).rename_axis(None, 1)
      Out[144]:
                2017-02-01  2017-03-01
      Partner1       174.5       170.0
      Partner2       160.0       185.0
      

      【讨论】:

      • 这不起作用,如Index contains duplicate entries, cannot reshape
      • @Laurent,你能提供一个可重现的数据集吗?
      • 不,出于商业原因,我不能这样做,但问题是某些“合作伙伴”名称重复,这使您的替代解决方案失败。在重复数据删除的表上使用您的方法效果很好。然而,pivot_table 并没有受到影响。
      • @Laurent,我说的不是真实数据……我已经更新了解决方案,所以它也可以处理重复数据……
      猜你喜欢
      • 2016-12-05
      • 1970-01-01
      • 1970-01-01
      • 2023-02-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-10-09
      • 2021-02-26
      相关资源
      最近更新 更多