为了账号安全,请及时绑定邮箱和手机立即绑定

熊猫在具有多个标题的数据框中对数据进行排序

熊猫在具有多个标题的数据框中对数据进行排序

慕码人8056858 2023-03-30 17:24:21
例如,我有一个像这里Datasample这样的数据表,我定义了 4 个标题,我知道我可以使用 df['2020-01-01', 'A', C1', 'D1' 访问最后一个标题之一]. 如果我想同时阅读“D1”和“D2”怎么办?还是“D1”和“D5”?什么是正确的代码,谢谢!
查看完整描述

1 回答

?
蛊毒传说

TA贡献1895条经验 获得超3个赞

首先,我们创建一个 DataFrame(带有 MultiIndex),就像您的示例中的那样:


import numpy as np

import pandas as pd


data = np.arange(11 * 8).reshape((11, 8))


midx = pd.MultiIndex.from_tuples(

    [

        ('2020-01-01', 'A', 'C1', 'D1'),

        ('2020-01-01', 'A', 'C1', 'D2'),

        ('2020-01-01', 'A', 'C2', 'D3'),

        ('2020-01-01', 'A', 'C2', 'D4'),

        

        ('2020-01-01', 'B', 'C3', 'D5'),

        ('2020-01-01', 'B', 'C3', 'D6'),

        ('2020-01-01', 'B', 'C4', 'D7'),

        ('2020-01-01', 'B', 'C4', 'D8'),

    ],

    names=('y', 'a', 'b', 'c',)

)


df = pd.DataFrame(data=data, columns=midx)


df

现在,我们使用有点麻烦的“索引切片”来提取感兴趣的列。这里有一些例子:


# get the 'A' columns

df.loc[:, (slice(None), 'A')]  


# get the 'C1' column

df.loc[:, (slice(None), slice(None), 'C1')]  


# get the D1 and D5 columns

df.loc[:, (slice(None), slice(None), slice(None), ['D1', 'D5'])]  


y       2020-01-01

a       A       B

b       C1      C3

c       D1      D5

0       0       4

1       8       12

2       16      20

3       24      28

4       32      36

5       40      44

6       48      52

7       56      60

8       64      68

9       72      76

10      80      84

这是执行最后一个操作后的 MultiIndex:


df.loc[:, (slice(None), slice(None), slice(None), ['D1', 'D5'])].columns


MultiIndex([('2020-01-01', 'A', 'C1', 'D1'),

            ('2020-01-01', 'B', 'C3', 'D5')],

           names=['y', 'a', 'b', 'c'])

查看完整回答
反对 回复 2023-03-30
  • 1 回答
  • 0 关注
  • 87 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信