【问题标题】:Pandas how to align left multi-levels columns?熊猫如何对齐左多级列?
【发布时间】:2021-07-03 03:22:24
【问题描述】:

一张图片胜过一千个字。

注意:我只想在视觉上而不是在逻辑上对齐。

【问题讨论】:

  • @AnuragDabas 不起作用,您的代码只是交换了AAA 的位置,不左对齐。
  • 您可以将您的代码发布为文本(df.head.to_dict()) 和预期的输出吗?
  • @HenryEcker 是的。
  • @HenryEcker MultiIndex([( 'A', 'close'), ( 'A', 'high'), ( 'A', 'low'), ( 'A', 'open'), ( 'A', 'vol'), ('AA', 'close'), ('AA', 'high'), ('AA', 'low'), ('AA', 'open'), ('AA', 'vol')], )
  • 您要在df_list[0] 中附加df_list[1] 吗?

标签: python pandas jupyter-lab


【解决方案1】:
  • 显然您希望将 OHLC 视为一个分类,以便您可以定义排序顺序
  • 使用pd.MultiIndex.from_arrays()重新构造索引
  • 在此将 OHLC 定义为排序分类
  • 然后sort_index() columns 使用定义的分类排序顺序
import numpy as np
import pandas as pd

# construct a multi-index DF
df = (
    pd.DataFrame(
        {
            "date": np.random.choice(pd.date_range("1-jan-2021", periods=5), 500),
            "rating": np.random.choice(["A", "AA"], 500),
            "ohlc": np.random.choice(["open", "close", "high", "low"], 500),
            "price": np.random.uniform(3, 5, 500),
        }
    )
    .sort_values(["date", "rating", "ohlc"])
    .set_index(["date", "rating", "ohlc"])
)

# reshape to same as "picture"
df2 = df.groupby(by=["date", "rating", "ohlc"]).mean().unstack(["rating", "ohlc"])

print(df2.to_string())

# redefine columns as categoricals so sort_index() works
df2.columns = pd.MultiIndex.from_arrays(
    [
        df2.columns.get_level_values("rating"),
        pd.CategoricalIndex(
            df2.columns.get_level_values("ohlc"),
            ordered=True,
            categories=["open", "high", "low", "close"],
        ),
    ]
)
# finally sort the columns...
df2.sort_index(axis=1)

print(df2.sort_index(axis=1).to_string())

排序前

               price                                                                      
rating             A                                      AA                              
ohlc           close      high       low      open     close      high       low      open
date                                                                                      
2021-01-01  3.812598  4.270862  3.804053  3.927815  3.807602  4.033908  3.989067  4.169900
2021-01-02  3.950977  3.798957  4.053549  3.885642  4.071506  4.091227  3.996981  4.179648
2021-01-03  4.130155  4.311536  4.072253  3.763274  4.238135  3.928009  3.898514  3.677661
2021-01-04  4.000603  4.211852  4.178882  4.112401  3.775267  4.224650  3.955743  4.150286
2021-01-05  3.902104  3.793516  3.973869  3.772823  3.980795  4.058692  4.007785  3.736026

排序后

rating             A                                      AA                              
ohlc            open      high       low     close      open      high       low     close
date                                                                                      
2021-01-01  3.927815  4.270862  3.804053  3.812598  4.169900  4.033908  3.989067  3.807602
2021-01-02  3.885642  3.798957  4.053549  3.950977  4.179648  4.091227  3.996981  4.071506
2021-01-03  3.763274  4.311536  4.072253  4.130155  3.677661  3.928009  3.898514  4.238135
2021-01-04  4.112401  4.211852  4.178882  4.000603  4.150286  4.224650  3.955743  3.775267
2021-01-05  3.772823  3.793516  3.973869  3.902104  3.736026  4.058692  4.007785  3.980795

【讨论】:

    猜你喜欢
    • 2023-03-16
    • 2021-08-16
    • 1970-01-01
    • 2013-06-18
    • 1970-01-01
    • 2022-01-24
    • 2021-10-27
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多