【问题标题】:Pandas: Unstacking One Column of a DataFramePandas:拆开数据框的一列
【发布时间】:2014-02-28 13:01:25
【问题描述】:

我想在我的 Pandas DataFrame 中取消堆叠一列。 DataFrame 由“日期”索引,我想取消堆叠“国家”列,以便每个国家/地区都是自己的列。当前的 pandas DF 如下所示:

             Country   Product      Flow Unit  Quantity  
Date                                                         
2002-01-31   FINLAND  KEROSENE  TOTEXPSB  KBD    3.8129     
2002-01-31    TURKEY  KEROSENE  TOTEXPSB  KBD    0.2542     
2002-01-31  AUSTRALI  KEROSENE  TOTEXPSB  KBD   12.2787     
2002-01-31    CANADA  KEROSENE  TOTEXPSB  KBD    5.1161     
2002-01-31        UK  KEROSENE  TOTEXPSB  KBD   12.2013     

当我使用 df.pivot 时,我收到以下错误“ReshapeError:索引包含重复条目,无法重塑”这是真的,因为我正在查看每个国家/地区同时报告的日期。我想要的是取消堆叠“国家/地区”列,以便每个月只显示一个日期。

像这样 Date 的 DataFrame 标头仍然是索引:

Date        FINLAND TURKEY  AUSTRALI  CANADA Flow      Unit

2002-01-31  3.8129  0.2542  12.2787   5.1161 TOTEXPSB   KBD

我已经为此工作了一段时间,但我没有取得任何进展,所以任何方向或见解都会很棒。

另外,请注意,您只看到 DataFrame 的头部,因此多年的 Data 采用这种格式。

谢谢,

道格拉斯

【问题讨论】:

    标签: python pandas


    【解决方案1】:

    如果您可以删除ProductUnitFlow,那么它应该很简单

    df.reset_index().pivot(columns='Country', index='Date', values='Quantity')
    

    给予

    Country  AUSTRALI    CANADA  FINLAND TURKEY  UK
    Date                    
    2002-01-31   12.2787     5.1161  3.8129  0.2542  12.2013
    

    【讨论】:

    • 请允许我补充一点信息。这个 DataFrame 已经被减少了。所以 Flow 列只有一个唯一的字符串“TOTEXPSB” 另外,这对于 Unit Column 也是一样的,“KBD”是该列中唯一的对象。所以我可以删除两列。我现在看到您的想法,并将删除这些列,看看我是否可以让它发挥作用。谢谢!道格拉斯
    • 谢谢道格拉斯,我已经更新了我的答案,假设您也可以删除Product。如果不是这样,请告诉我。
    • 谢谢!这是一个非常干净的解决方案。
    猜你喜欢
    • 2020-10-01
    • 1970-01-01
    • 2016-10-13
    • 1970-01-01
    • 2020-12-21
    • 1970-01-01
    • 1970-01-01
    • 2017-08-29
    • 2020-01-30
    相关资源
    最近更新 更多