pandas 是否可以从 Dataframe 的行中提取多索引的一部分并将其应用为列

wztqucjr  于 2023-06-20  发布在  其他
关注(0)|答案(2)|浏览(118)

我有一个多索引行和一个单一的索引列的dataframe。“foo”只是第一个EntityType,我会有其他的,这将使这个dataframe更长,更难查看。

我想把聚合方法索引列移到列中这样就有了这样一个表
| 实体类型|分位数范围|酒吧||||巴兹||||
| - -----|- -----|- -----|- -----|- -----|- -----|- -----|- -----|- -----|- -----|
| | | 最大值|平均|标准|总计|最大值|平均|标准|总计|
| 福|q99-q100|||||||||
| 福|q90-q99|||||||||
| 福|q70-q90|||||||||
| 福|q0-q70|||||||||
| 基克斯|q99-q100|||||||||
| 基克斯|q90-q99|||||||||
| 基克斯|q70-q90|||||||||
| 基克斯|q0-q70|||||||||
| 马兹|q99-q100|||||||||
| 马兹|q90-q99|||||||||
| 马兹|q70-q90|||||||||
| 马兹|q0-q70|||||||||
有没有一个简单的命令来做到这一点?像是融化或重置索引?我只是不知道该去哪里搜索才能找到答案。

6jjcrrmo

6jjcrrmo1#

把我的评论作为答案:
您可以使用.unstack来实现这一点,顾名思义,它删除了MultiIndex的级别以创建多列索引:

df.unstack()

默认情况下,这将取消堆叠最后一个级别,但如果您希望使用level="AggregationMethod"level=-1(默认值)或level=2来指定此选项,则可以指定此选项。

fd3cxomn

fd3cxomn2#

下面是一个如何使用Pandas pivot(如评论中所建议的)和reindex的示例:

import random

import pandas as pd

# Toy dataframe (same as yours after reseting the index)
df = pd.DataFrame(
    {
        "Entity Type": ["foo" for _ in range(20)],
        "Quantile Range": ["q99_q100", "q90_q99", "q70_q90", "q00_q70"] * 5,
        "AggregationMethod": ["max", "avg", "std", "total", "count"] * 4,
        "bar": [random.uniform(1, 999) for _ in range(20)],
        "baz": [random.uniform(1, 999) for _ in range(20)],
    }
)
df = df.pivot(
    index=["Entity Type", "Quantile Range"],
    columns="AggregationMethod",
    values=["bar", "baz"],
).reindex(["max", "avg", "std", "total"], level=1, axis=1)
print(df)
# Output

                                   bar
AggregationMethod                  max         avg         std       total   
Entity Type Quantile Range
foo         q00_q70         141.752307  822.270987  199.740853  595.444166  \
            q70_q90         383.574450  410.730888  838.562828  545.299705   
            q90_q99         339.588340  606.983173  935.142608  407.674059   
            q99_q100        161.833517  932.267262  157.149458  618.105967   

                                   baz
AggregationMethod                  max         avg         std       total  
Entity Type Quantile Range
foo         q00_q70          17.986766  298.760555  389.559554   49.925246  
            q70_q90         888.435092  695.713473  502.429534  209.356226  
            q90_q99         715.425998  209.749918  136.480141  525.729657  
            q99_q100        705.721265  956.273655  684.883477   39.114393

相关问题