pandas 如何对多索引(列) Dataframe 中的数据进行排序?

z18hc3ub  于 2023-01-11  发布在  其他
关注(0)|答案(1)|浏览(103)

首先,请原谅我糟糕的词汇,我还在为正确的术语而挣扎,并且刚刚发现我已经创建了一个多索引 Dataframe ,我正在努力学习如何操作它。
多索引 Dataframe 有30行和546列,看起来像下面的放大版本:
| | A类|||乙|||C级|||D级|||
| - ------| - ------| - ------| - ------| - ------| - ------| - ------| - ------| - ------| - ------| - ------| - ------| - ------|
| | aa| bb|立方厘米|aa| bb|立方厘米|aa| bb|立方厘米|aa| bb|立方厘米|
| 日期|||||||||||||
| 2023年1月2日|1个|二十四|六个|三个|第二章|七|三个|十个|十二|五个|九|二十一|
| 2023年1月3日|1个|二十三|七|三个|四个|六个|三个|九|十三|六个|十个|二十二|
| 2023年1月4日|第二章|二十二|八个|四个|六个|七|三个|九|十二|八个|十四|二十四|
| 2023年1月5日|三个|二十一|十个|三个|八个|六个|四个|八个|十一|十个|十二|二十一|
该索引是一个时间戳日期,并且顶级(0级?)列索引A、B、C、D等每个都具有相同的91个二级(1级?)成员:aa、bb、cc等
因为总共有546列,91个"1级"列,所以必须有6个"0级"列。我看不到它们,因为表太大了,只能显示第一个和最后一个。
事实上,这是一个从雅虎获得的股票数据表,其中A、B、C是(6)个财务值,如收盘价、成交量、高点等,aa、bb、cc等是(91)个公司代码。
我想学习如何执行以下操作:
1.如何提取"0级"列名的列表。
1.如何提取"级别1"列名的列表。
1.对于1行(日期),提取所有"0级"和一个"1级"指标的数据。(例如,一家公司在一天的所有财务数据)。
1.对于1行(日期),一个"0级"包含所有"0级"数据。例如,所有公司在一天内的数量数据。
我一直在尝试这样的事情:

df.loc[:,(['A','B'],['aa,'bb', 'cc'])]
df.loc['2023-01-02', :]

这工作,但我不能排序括号和冒号的权利,做上述的东西。
另外,

df.loc[:,(['A','D'],['aa,'cc','ff'])]

以及

df.loc['2023-01-05':,([A,C],[aa,dd])]

工作,但是

df.loc['2023-01-05',([A:],[aa,dd])]

以及

df.loc['2023-01-05',(A:,[aa,dd])]

给出了无效的语法。有人能解释一下吗,或者给我指一个教程,这将有助于级别定义和圆/方括号和冒号?
谢谢。

sgtfey8w

sgtfey8w1#

要提取 level 列名的列表,可以使用get_level_values

df.columns.get_level_values(0)
#Index(['A', 'A', 'A', 'B', 'B', 'B', 'C', 'C', 'C', 'D', 'D', 'D'], dtype='object')

df.columns.get_level_values(1)
#Index(['aa', 'bb', 'cc', 'aa', 'bb', 'cc', 'aa', 'bb', 'cc', 'aa', 'bb', 'cc'], dtype='object')

df.columns.get_level_values(0).unique()
#Index(['A', 'B', 'C', 'D'], dtype='object')

df.columns.get_level_values(1).unique()
#Index(['aa', 'bb', 'cc'], dtype='object')

对于3和4,使用pd.IndexSlice比较方便用途:

# all level zero data for a specific level one index
df.loc['2023-01-05', pd.IndexSlice[:, 'aa']]

#A  aa     3
#B  aa     3
#C  aa     4
#D  aa    10
#Name: 2023-01-05, dtype: int64

# all level one data for a specific level zero index

df.loc['2023-01-05', pd.IndexSlice['A', :]]
#A  aa     3
#   bb    21
#   cc    10
#Name: 2023-01-05, dtype: int64

相关问题