Перейти к содержимому

Как транспонировать dataframe pandas

  • автор:

Как в pandas сменить столбцы со строками местами?

Не могу найти документацию на тему того как сменить столбцы и строки местами, чтобы получилось таблица вида:

 baseVolume high24hr highestBid BTC_1 1 1 1 BTC_2 2 2 2 

Отслеживать
149k 12 12 золотых знаков 59 59 серебряных знаков 132 132 бронзовых знака
задан 12 дек 2017 в 14:09
Evgeny Timofeev Evgeny Timofeev
132 1 1 золотой знак 1 1 серебряный знак 9 9 бронзовых знаков

1 ответ 1

Сортировка: Сброс на вариант по умолчанию

Если вы хотите транспонировать DataFrame:

In [12]: new = df.T In [13]: new Out[13]: baseVolume high24hr highestBid id isFrozen last low24hr lowestAsk percentChange quoteVolume BTC_AMP 29.541474 0.000020 0.000018 160.0 0.0 0.000018 0.000015 0.000018 0.083690 1.735747e+06 BTC_ARDR 219.976930 0.000048 0.000048 177.0 0.0 0.000048 0.000033 0.000048 0.316515 5.371617e+06 BTC_BCH 2031.838238 0.096500 0.089407 189.0 0.0 0.089520 0.080007 0.089520 0.078948 2.331001e+04 
In [25]: df.T.query("last > .0001") Out[25]: baseVolume high24hr highestBid id isFrozen last low24hr lowestAsk percentChange quoteVolume BTC_BCH 2031.838238 0.0965 0.089407 189.0 0.0 0.08952 0.080007 0.08952 0.078948 23310.005689 

UPDATE:

TypeError: ‘>’ not supported between instances of ‘str’ and ‘float’ как сконвертировать тип в запросе?

x = df.T x.assign(last=pd.to_numeric(x.last, errors='coerce')).query("last > .0001") 

Как транспонировать таблицу в пандасе так, чтобы даты стали группирующей колонкой над всем, кроме времени?

Может кто-нибудь знает изящный способ быстро преобразовать таблицу к нужной структуре?

  • Вопрос задан 24 янв. 2023
  • 278 просмотров

3 комментария

Простой 3 комментария

Maksim_64

Не совсем понятно что вы все таки хотите сделать, вот вы говорите groupby по дате, в вашей таблице две даты то есть он создаст две группы и на этих группах вы можете запускать аггрегирующие функции. То есть если вы группируете по дате ваш датафрем будет иметь два строки потому что группы две. Если смотреть на желаемый результат то нужно смотреть в сторону reshaping dataframe в документации потому что вы просто переформатируете датафрейм на тех же данных. group by это про аггрегируещее функции а не про перформатирование фрейма. Непонятно что хотите по этому не могу ответить.

LakeForest @LakeForest Автор вопроса

Максим Припадчев, мне нужен желаемый результат, то есть да — переформатирование. Просто с pivot так и не понял как сделать, поэтому начал без groupby пытаться.

TosterModerator

Модератор @TosterModerator

Фрагменты кода надо размещать в виде текста и оборачивать тэгом code для корректного отображения. Удобно делать кнопкой
Это обязательно, см.п.3.8 Регламента.
Сюда же относится traceback, ввод и вывод в консоли и другая структурированная текстовая инфа.

Решения вопроса 1

Maksim_64

Data Analyst

import pandas as pd #создаю такую же таблицу как у тебя df = pd.DataFrame(< 'Дата':['23-01-01','23-01-01','24-01-01','24-01-01'], 'Часы':['10:00','11:00','10:00','11:00'], 'Процент':[10.2,11.2,22.2,42.2], 'Опрошенных':[20,27,40,12] >) #само решение reshaped_df = df.pivot(index=['Дата'],columns='Часы',values=['Процент','Опрошенных'])\ .swaplevel(axis=1).T.reset_index()\ .pivot(index='Часы',columns='level_1') reshaped_df.columns.names = ['Дата',None] print(reshaped_df)

Ну в общем вот сделал такую же таблицу как у тебя в желаемом результате, решение работает, но конечно возможно наверное чуть по короче, задачка то переформатировать именно вот таким замудренным образом (не могу представить зачем с ней же неудобно работать) отнюдь не самая простая. Но сделал.

Да у тебя порядок [процент, опрошенных, процент, опрошенных] а у меня [опрошенных, процент, опрошенных, процент] на данные сами числа естественно полностью совпадают. Если это играет какую-то роль то столбцовые мульти-индексы сам подправишь. А в остальном полная копия твоей таблицы.

Получение списка из столбца или строки DataFrame в Pandas

Python snake transforming dataframe to a list.

Очень часто при работе с данными возникает необходимость преобразования столбцов или строк в списки. Одним из наиболее распространённых инструментов для работы с данными в Python является библиотека Pandas, которая предоставляет структуру данных DataFrame. DataFrame — это двумерная маркированная структура данных с различными типами столбцов.

Рассмотрим пример. Допустим, есть DataFrame, который содержит информацию о продажах в магазине:

import pandas as pd data = df = pd.DataFrame(data)

Теперь, если требуется получить содержимое столбца ‘Товар’ в виде списка, это можно сделать следующим образом:

list_of_goods = df['Товар'].tolist()

Метод tolist() преобразует столбец DataFrame в список. Теперь переменная list_of_goods содержит список товаров.

Для получения содержимого строки как списка, можно сначала транспонировать DataFrame (поменять местами строки и столбцы), а затем применить тот же метод tolist() . Например, чтобы получить первую строку DataFrame в виде списка, можно сделать так:

list_of_first_row = df.T[0].tolist()

Таким образом, с помощью метода tolist() можно легко преобразовать содержимое столбца или строки DataFrame в список.

Как транспонировать кадр данных Pandas без индекса

Вы можете использовать следующий синтаксис для переноса кадра данных pandas и исключения индекса:

df.set_index('first_col'). T 

Это просто устанавливает первый столбец DataFrame в качестве индекса, а затем выполняет транспонирование.

В следующем примере показано, как использовать этот синтаксис на практике.

Пример: транспонирование Pandas DataFrame без индекса

Предположим, у нас есть следующие Pandas DataFrame:

import pandas as pd #create DataFrame df = pd.DataFrame() #view DataFrame print(df) team points assists 0 A 18 5 1 B 22 7 2 C 19 7 3 D 14 9 4 E 14 12 5 F 11 9 

Если мы транспонируем DataFrame, значения индекса будут отображаться вверху:

#transpose DataFrame df.T 0 1 2 3 4 5 team A B C D E F points 18 22 19 14 14 11 assists 5 7 7 9 12 9 

Чтобы транспонировать DataFrame без индекса, мы можем сначала использовать функцию set_index() :

#transpose DataFrame without index df.set_index('team'). T team A B C D E F points 18 22 19 14 14 11 assists 5 7 7 9 12 9 

Обратите внимание, что значения индекса больше не отображаются в верхней части транспонированного кадра данных.

Дополнительные ресурсы

В следующих руководствах объясняется, как выполнять другие распространенные задачи в pandas:

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *