Транспонирование всего, кроме первого столбца в кадре данных - PullRequest
0 голосов
/ 24 февраля 2020

У меня есть следующий фрейм данных

df = pd.DataFrame({'ISIN': ['A', 'B', 'C'], 
                   'Jan': [40000, 50000, 42000],
                   'Feb': [40000, 50000, 42000],
                   'Mar': [40000, 50000, 42000]})

, который выдает

   ISIN Jan   Feb    Mar
0  A    40000 50000  42000
1  B    40000 50000  42000
2  C    40000 50000  42000

Я пытаюсь создать вывод, где данные выглядят так:

   Date     A    B      C
0  Jan    40000 40000  40000
1  Feb    50000 50000  50000
2  Mar    42000 42000  42000

Мой первый проход состоял в том, чтобы просто транспонировать анализ с использованием

df = df.T

Такого рода работа, за исключением строки ISIN (ie что я хочу в качестве заголовков столбцов), все еще находилась в наборе данных. :

           0     1      2
  ISIN     A     B      C
  Jan    40000 40000  40000
  Feb    50000 50000  50000
  Mar    42000 42000  42000

Затем я попытался выдвинуть строку ISIN перед выполнением транспонирования, ie

ISIN = df.pop ('ISIN') df = df.T

Это вычеркнуло строку ISIN, но потом, когда я пытаюсь вставить свой вытолкнутый столбец (используя df.insert) и изменить ось ... Я застреваю

Я также пытался использовать df.melt, но Я изо всех сил пытался найти правильные вещи в нужных местах

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

Спасибо !

Ответы [ 3 ]

0 голосов
/ 24 февраля 2020

При транспонировании индекс становится столбцами и индексом столбцов, поэтому сначала нужно установить ISIN в качестве индекса, а затем транспонировать.

import pandas as pd

df = pd.DataFrame({'ISIN': ['A', 'B', 'C'], 
                   'Jan': [40000, 50000, 42000],
                   'Feb': [40000, 50000, 42000],
                   'Mar': [40000, 50000, 42000]})
df.set_index('ISIN', inplace=True)
print(df.T)

Что дает:

ISIN      A      B      C
Jan   40000  50000  42000
Feb   40000  50000  42000
Mar   40000  50000  42000
0 голосов
/ 24 февраля 2020

Вы можете попробовать:

df.rename(columns={'ISIN': 'Date'}).set_index('Date').T

Результат:

Date      A      B      C
Jan   40000  50000  42000
Feb   40000  50000  42000
Mar   40000  50000  42000
0 голосов
/ 24 февраля 2020

Когда вы перемещаете DataFrame, вы также обмениваетесь индексом и столбцами. Поэтому вы должны явно установить индекс:

df = df.set_index('ISIN').T.reset_index()

Вы получите:

ISIN index      A      B      C
0      Jan  40000  50000  42000
1      Feb  40000  50000  42000
2      Mar  40000  50000  42000

Значения верны, но метки отключены. Вы можете исправить их с помощью rename_axis:

df = df.set_index('ISIN').T.rename_axis('Date').reset_index().rename_axis(None, axis=1)

Вы получите, как и ожидалось:

  Date      A      B      C
0  Jan  40000  50000  42000
1  Feb  40000  50000  42000
2  Mar  40000  50000  42000
...