Python dict со значениями как кортежи для pandas DataFrame

У меня есть следующий dict:

td = {'q1':(111,222), 'q2':(333,444)}

Я хотел бы преобразовать его в dataframe, который выглядит так:

Query    Value1     Value2
q1       111       222
q2       333       444

Я пробовал следующее:

df = pd.DataFrame(td.items())

Результат выглядит следующим образом:

    0         1
0   q1  (111,222)
1   q2  (333,444) 

Если это было не совсем очевидно, я новичок в python и pandas. Как я могу получить словарь со значениями как кортежи, чтобы вести себя как отдельные столбцы в фрейме данных?

Моя конечная цель - показать процентную разницу между значением1 и значением2.

Ответы

Ответ 1

Настройка

td = {'q1':(111,222), 'q2':(333,444)}

Вариант 1

pd.DataFrame(td).T.rename_axis('Query').add_prefix('Value').reset_index()

  Query  Value0  Value1
0    q1     111     222
1    q2     333     444

Вариант 2

from cytoolz.dicttoolz import merge

pd.DataFrame(
    [merge(
        {'Query': k},
        {'Value{}'.format(i): x for i, x in enumerate(v, 1)}
     ) for k, v in td.items()]
)

  Query  Value1  Value2
0    q1     111     222
1    q2     333     444

Ответ на комментарий

df = pd.DataFrame(td).T.rename_axis('Query').add_prefix('Value')
df.assign(PctChg=df.pct_change(axis=1).iloc[:, -1]).reset_index()

  Query  Value0  Value1    PctChg
0    q1     111     222  1.000000
1    q2     333     444  0.333333

или

df = pd.DataFrame(td).T.rename_axis('Query').add_prefix('Value')
df.eval('PctChg = Value1 / Value0 - 1', inplace=False).reset_index()

  Query  Value0  Value1    PctChg
0    q1     111     222  1.000000
1    q2     333     444  0.333333

Ответ 2

Попробуй?

td = {'q1':(111,222), 'q2':(333,444)}
df = pd.DataFrame(td).T
df
Out[25]: 
      0    1
q1  111  222
q2  333  444

Ответ 3

Использование from_dict:

pd.DataFrame.from_dict({'q1':(111,222), 'q2':(333,444)}, orient='index')

Возврат:

      0    1
q1  111  222
q2  333  444

Вставьте несколько форматирования:

df.columns = 'Value' + df.columns.to_series().add(1).astype(str)
df.index.name = 'Query'

Вы получаете:

       Value1  Value2
Query                
q1        111     222
q2        333     444

Ответ 4

Вы можете определить data и index, используя итераторы словаря:

import pandas as pd
td = {'q1':(111,222), 'q2':(333,444)}
pd.DataFrame(data=list(td.values()), index=list(td.keys()))

должен создать DataFrame:

        0       1
    q1  111     222
    q2  333     444