Как построить Pandas DataFrame из многоиндексного словаря - PullRequest
0 голосов
/ 17 июня 2020

Я пытаюсь понять, как построить Pandas DataFrame из многоиндексного словаря. Прямо сейчас мои данные в одной строке на индекс, и я бы хотел, чтобы они были в нескольких строках на индекс.

x = [1,2,3,4,5,6,7,8,9,10]
data1 = {'symbol_1':x,'symbol_2': x,'symbol_3':x}
data2 = {'symbol_1':x,'symbol_2': x,'symbol_3':x}
data3 = {'symbol_1':x,'symbol_2': x,'symbol_3':x}
y = {'data_1':data1, 'data_2':data2, 'data_3':data3}

Need to make data in multiple rows

Ответы [ 4 ]

2 голосов
/ 17 июня 2020

Перейти на DataFrame + explode

df = pd.DataFrame(y).apply(pd.Series.explode,1).T

        symbol_1  symbol_2  symbol_3
data_1         1         1         1
data_1         2         2         2
data_1         3         3         3
data_1         4         4         4
data_1         5         5         5
data_1         6         6         6
data_1         7         7         7
data_1         8         8         8
data_1         9         9         9
data_1        10        10        10
data_2         1         1         1
data_2         2         2         2
data_2         3         3         3
data_2         4         4         4
data_2         5         5         5
data_2         6         6         6
data_2         7         7         7
data_2         8         8         8
data_2         9         9         9
data_2        10        10        10
data_3         1         1         1
data_3         2         2         2
data_3         3         3         3
data_3         4         4         4
data_3         5         5         5
data_3         6         6         6
data_3         7         7         7
data_3         8         8         8
data_3         9         9         9
data_3        10        10        10
2 голосов
/ 17 июня 2020

Если требуется несколько значений для каждой строки в MultiIndex, используйте concat с пониманием dict:

df = pd.concat({k:pd.DataFrame(v) for k, v in y.items()})
print (df)
          symbol_1  symbol_2  symbol_3
data_1 0         1         1         1
       1         2         2         2
       2         3         3         3
       3         4         4         4
       4         5         5         5
       5         6         6         6
       6         7         7         7
       7         8         8         8
       8         9         9         9
       9        10        10        10
data_2 0         1         1         1
       1         2         2         2
       2         3         3         3
       3         4         4         4
       4         5         5         5
       5         6         6         6
       6         7         7         7
       7         8         8         8
       8         9         9         9
       9        10        10        10
data_3 0         1         1         1
       1         2         2         2
       2         3         3         3
       3         4         4         4
       4         5         5         5
       5         6         6         6
       6         7         7         7
       7         8         8         8
       8         9         9         9
       9        10        10        10
1 голос
/ 17 июня 2020

Вот другой способ использования from_dict:

dfs = []
for key in y.keys():
    df = pd.DataFrame.from_dict(y[key])
    df['index'] = key
    dfs.append(df)

df = pd.concat(dfs)
print(df)

Вывод:

  symbol_1  symbol_2  symbol_3   index
0         1         1         1  data_1
1         2         2         2  data_1
2         3         3         3  data_1
3         4         4         4  data_1
4         5         5         5  data_1
5         6         6         6  data_1
6         7         7         7  data_1
7         8         8         8  data_1
8         9         9         9  data_1
9        10        10        10  data_1
0         1         1         1  data_2
1         2         2         2  data_2
2         3         3         3  data_2
3         4         4         4  data_2
4         5         5         5  data_2
5         6         6         6  data_2
6         7         7         7  data_2
7         8         8         8  data_2
8         9         9         9  data_2
9        10        10        10  data_2
0         1         1         1  data_3
1         2         2         2  data_3
2         3         3         3  data_3
3         4         4         4  data_3
4         5         5         5  data_3
5         6         6         6  data_3
6         7         7         7  data_3
7         8         8         8  data_3
8         9         9         9  data_3
9        10        10        10  data_3
0 голосов
/ 17 июня 2020

Другой найденный мной способ отображения данных с тем же индексом

dict_of_df = {k: pd.DataFrame(v) for k,v in y.items()}
df = pd.concat(dict_of_df, axis=1)

enter image description here

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...