Reputation: 413
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}
Upvotes: 0
Views: 95
Reputation: 413
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)
Upvotes: 0
Reputation: 7594
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
Upvotes: 1
Reputation: 862671
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
Upvotes: 2
Reputation: 323236
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
Upvotes: 2