【问题标题】:add columns to specific level pivot tables in pandas将列添加到熊猫中的特定级别数据透视表
【发布时间】:2021-11-10 06:57:45
【问题描述】:

我正在尝试使用 pandas 数据透视表来实现这种多索引表单。

因为原来的数据是这样的。

我使用此代码table = pd.pivot_table(df, index=str(df.columns[0]), columns =list(df.columns[1:4]), values='Value') 得到此结果

但现在我需要将这三列(预测、公差、基线预测)添加到每个子产品的数据透视表的最详细级别,例如在 ECo 下添加它们,我尝试了这个 table[('OcP', 'CoC', 'tolerance')] = 0 它有效但添加了列到数据透视表的末尾,像这样。

那么如何添加它们并使它们属于已经存在的相同子类别,而不是像上图所示的枢轴末端? 注意:我知道有类似的问题,但它们并没有解决我的问题。

【问题讨论】:

  • 您的呼叫('OcP'、'CoC'、'tolerance')表示 level1、level2、level3。如果您执行 df["OcP"] = 0 ,它将在 MultiIndex 的 level1 上创建一个带有 OcP 的列。
  • 您能否详细说明您希望这些值在索引层次结构中的位置?
  • 是的,我的意思是级别,但我想将新列插入到 level3,
  • 我想将它们添加到 level3,以便它们类似于(B、ENS 或 G)
  • 好的,但您还需要指定更高的级别。

标签: python pandas pivot-table


【解决方案1】:
table[('OcP', 'CoC', 'tolerance')] = 0

将 'OcP' 设置为 level1 'CoC' 设置为 level2 和 'tolerance' 设置为 level3。

你说你想要它们在第 3 层,而不是你必须像这样设置它们:

table[(level1, level2, "CoC")]

您还需要在层次结构中指定索引。

新列被添加到数据框的末尾,看起来好像它不是多索引层次结构的一部分,但确实如此,您可以通过调用 table[(level1, level2) 来检查] 你会看到它被包含在内。

如果你想显示它们按多索引层次排序,你应该对列进行排序:

df.iloc[:,df.columns.sortlevel(level=[0,1])[1]]

【讨论】:

    【解决方案2】:

    感谢borut,我终于实现了解决方案,他照亮了通往它的道路,这个question,它使用table[('OcP', 'CoC', 'tolerance')] = 0,然后将pivot.sort_index(axis=1)应用于枢轴。

    【讨论】:

    • 我对答案进行了修改,你能接受吗?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-07-09
    • 1970-01-01
    • 2021-06-09
    • 1970-01-01
    • 2019-04-28
    • 2021-02-28
    相关资源
    最近更新 更多