выберите конкретный столбец из мультииндексного фрейма данных pandas

#python #pandas #dataframe

#питон #pandas #фрейм данных

Вопрос:

У меня есть многоиндексный фрейм данных с 200 столбцами. Я хотел бы выбрать из этого конкретный столбец. Предположим, что df — это какая-то часть моего фрейма данных:

 df=
                       a                             b
                       l       h     l       h       l       h      l    
                      cold    hot    hot    cold    cold     hot   hot
2009-01-01 01:00:00   0.1     0.9    0.4    0.29    0.15     0.6    0.3
2009-01-01 02:00:00   0.1     0.8    0.35   0.2     0.15     0.6    0.4
2009-01-01 03:00:00   0.12    0.7    0.3    0.23    0.23     0.8    0.3
2009-01-01 04:00:00   0.1     0.9    0.33   0.24    0.15     0.6    0.4
2009-01-01 05:00:00   0.17    0.9    0.41   0.23    0.18     0.75   0.4
 

Я хотел бы выбрать значения для этого столбца[h, hot].

Мой вывод должен быть:

 df['h','hot']=
                       a      b
2009-01-01 01:00:00   0.9   0.6
2009-01-01 02:00:00   0.8   0.6
2009-01-01 03:00:00   0.7   0.8
2009-01-01 04:00:00   0.9   0.6
2009-01-01 05:00:00   0.9   0.75
 

Я был бы признателен за любые указания о том, как я мог бы это выбрать.

Комментарии:

1. Я думаю, что df['b','h','hot'] это должно работать здесь только для иерархических столбцов

2. Пожалуйста, опубликуйте list(df.columns) . Это поможет нам увидеть, есть ли неправильные пробелы…

3. df['b','h','hot'] работает для меня, если это не так, тогда опубликуйте df.info() и print(df.columns.tolist() посмотрите, каковы реальные имена столбцов

4. Спасибо вам за ваши ответы. Но я забыл один второстепенный момент в своем вопросе. Я немного изменил свой пост. Я очень ценю это, если вы поможете мне с измененной версией моего вопроса. Спасибо.

Ответ №1:

Для нарезки по нескольким индексам по вашему желанию столбцы необходимо сначала отсортировать sort_index(axis=1) , затем вы можете выбрать интересующие вас столбцы без ошибок:

 In [12]:
df = df.sort_index(axis=1)
df['a','h','hot']

Out[12]:
0
2009-01-01 01:00:00    0.9
2009-01-01 02:00:00    0.8
2009-01-01 03:00:00    0.7
2009-01-01 04:00:00    0.9
2009-01-01 05:00:00    0.9
Name: (a, h, hot), dtype: float64
 

Комментарии:

1. Большое вам спасибо. Да, это именно то, что я искал. Я пробовал эти команды без «сортировки», и, как вы сказали, я получил эту ошибку. Не могли бы вы подсказать мне, что именно делает эта команда «сортировать»? Спасибо.

2. sort_values в этом случае просто сортирует столбцы, это метод Index , Series , DataFrame и т. Д

3. Спасибо. Но «sort_values» приводит к сортировке имен столбцов без перемещения их значений (неправильная метка). Это означает, что когда я ищу значения df[‘a’,’h’,’hot’], я получу другие значения, например df[‘a’,’l’,’cold’]. Я очень ценю это, если вы поможете мне решить эту проблему.

4. df = df.sort_index(axis=1) работает ли до выбора столбца?

Ответ №2:

Попробуй это:

 dataframe= pd.DataFrame()
dataframe["temp"] = df["b"]["h"]["hot"]
 

df — это ваш фрейм данных