Na przykład mam kartę danych, jak tutaj DataSampl, zdefiniowałem 4 nagłówki, Rozumiem, że mogę uzyskać dostęp do jednego z ostatnich nagłówka przy użyciu DF ['2020-01-01', "A", C1 ', "D1"]. Co jeśli chcę przeczytać zarówno "D1", jak i "D2"? Lub "D1" i "D5"? Jaki byłby właściwy kod, dziękuję!

0
Sophia Deng 24 lipiec 2020, 23:07

1 odpowiedź

Najlepsza odpowiedź

Po pierwsze, tworzymy dataframe (z multiinindex) jak ten w swoim przykładzie:

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

Teraz używamy nieco kłopotliwego kromka indeksu ", aby wyodrębnić kolumny zainteresowania. Oto kilka przykładów:

# 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

Oto multiIndex po wykonaniu ostatniej operacji:

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'])

Dokumenty są tutaj: https://pandas.pydata.org/pandas-docs/stable/ User_guide / Advanced.html

0
jsmart 24 lipiec 2020, 21:46