【问题标题】:Pivot to multi-index and combining columns into one level using pandas使用 pandas 转向多索引并将列组合到一个级别
【发布时间】:2021-02-26 22:26:46
【问题描述】:

我正在尝试旋转数据框,以便将“ID”列中的唯一值用于列标签,并创建多索引以将数据组织成分组行。多索引的第二级将是从“日期”列获得的唯一值,多索引的第一级将包含在透视操作中“未考虑”的所有其他列。

这是数据框示例:

df = pd.DataFrame(
    data=[['A', '10/19/2020', 33, 0.2],
          ['A', '10/6/2020', 17, 0.6],
          ['A', '11/8/2020', 7, 0.3],
          ['A', '11/14/2020', 19, 0.2],
          ['B', '10/28/2020', 26, 0.6],
          ['B', '11/6/2020', 19, 0.3],
          ['B', '11/10/2020', 29, 0.1]],
    columns=['ID', 'Date', 'Temp', 'PPM'])

原始文件

    ID  Date        Temp    PPM
0   A   10/19/2020  33      0.2
1   A   10/6/2020   17      0.6
2   A   11/8/2020   7       0.3
3   A   11/14/2020  19      0.2
4   B   10/28/2020  26      0.6
5   B   11/6/2020   19      0.3
6   B   11/10/2020  29      0.1

想要的输出

      ID            A       B
      Date           
Temp  10/19/2020    33      NaN
      10/28/2020    NaN     26
      11/6/2020     17      19
      11/8/2020     7       NaN
      11/10/2020    NaN     29
      11/14/2020    19      NaN
PPM   10/19/2020    0.2     NaN
      10/28/2020    NaN     0.6
      11/6/2020     0.6     0.3
      11/8/2020     0.3     NaN
      11/10/2020    NaN     0.1
      11/14/2020    0.2     NaN

我查看了 this extensive answer 以在 pandas 中旋转数据框,但我无法看到它如何涵盖/应用它,我正在尝试实施的具体案例。

编辑:虽然我在示例中提供了日期作为字符串,但这些实际上是我正在处理的完整数据框中的 datetime64 对象。

【问题讨论】:

    标签: pandas pivot pandas-groupby pivot-table multi-index


    【解决方案1】:

    让我们试试set_indexunstack

    out = df.set_index(['ID','Date']).unstack().T
    Out[27]: 
    ID                  A     B
         Date                  
    Temp 10/19/2020  33.0   NaN
         10/28/2020   NaN  26.0
         10/6/2020   17.0   NaN
         11/10/2020   NaN  29.0
         11/14/2020  19.0   NaN
         11/6/2020    NaN  19.0
         11/8/2020    7.0   NaN
    PPM  10/19/2020   0.2   NaN
         10/28/2020   NaN   0.6
         10/6/2020    0.6   NaN
         11/10/2020   NaN   0.1
         11/14/2020   0.2   NaN
         11/6/2020    NaN   0.3
         11/8/2020    0.3   NaN
    

    【讨论】:

    • 当我尝试这个方法时,我得到一个 ValueError 异常:索引包含重复的条目,无法重塑。在我的完整数据框中,我的日期列实际上包含日期对象,这可能是造成这种情况的原因。
    • 我在其中扔了一个带有“last”的 groupby + agg 来处理重复的日期。谢谢你的回答。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-08-09
    • 2016-12-27
    • 2021-09-07
    • 1970-01-01
    • 2018-04-08
    • 2018-02-03
    相关资源
    最近更新 更多