【问题标题】:Pandas sorting data in a dataframe with multiple headersPandas 对具有多个标头的数据框中的数据进行排序
【发布时间】:2020-11-14 17:50:38
【问题描述】:

例如,我有一个像 Datasample 这样的数据表,我定义了 4 个标头,我知道我可以使用 df['2020-01-01', 'A', C1 访问最后一个标头之一','D1']。如果我想同时阅读“D1”和“D2”怎么办?还是“D1”和“D5”?什么是正确的代码,谢谢!

【问题讨论】:

标签: python pandas


【解决方案1】:

首先,我们创建一个 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'])

文档在这里: https://pandas.pydata.org/pandas-docs/stable/user_guide/advanced.html

【讨论】:

    猜你喜欢
    • 2020-02-29
    • 2013-06-05
    • 1970-01-01
    • 2016-05-03
    • 2020-04-23
    • 2017-12-26
    • 2018-01-16
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多