简体   繁体   中英

How to build a Pandas DataFrame from a multi-index dictionary

I'm trying to figure out how to build a Pandas DataFrame from a multi-index dictionary. Right now my data in one row per index and I would like it if it was in multiple rows per index.

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}

需要在多行中制作数据

If need multiple values per rows in MultiIndex use concat with dict comprehension:

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

Pass to 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

Here's another way using 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)

Output:

  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

Another method I found for displaying data with the same index

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

在此处输入图像描述

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM