Pandas 来自嵌套字典的数据框将字典键添加到自己的列
Pandas dataframe from nested dictionary adding dict key to own column
我有一个包含 10,000 多个帐户的嵌套字典。我需要一个强大的解决方案。下面是一个需要缩放到n的例子。
以 acct # 为键的嵌套字典如下所示:
{'Acct301':
ds trend yhat y
0 2018-05-01 00:00:00 1.268612 0.679369 2.554900
1 2018-05-01 01:00:00 1.268372 0.089233 2.022369
2 2018-05-01 02:00:00 1.268132 -0.256185 1.640524
[744 rows x 19 columns],
'Acct2':
ds trend yhat y
0 2018-05-01 00:00:00 0.575119 -0.456240 1.26193
1 2018-05-01 01:00:00 0.575140 -0.687562 1.033594
2 2018-05-01 02:00:00 0.575161 -0.795286 0.906530
[744 rows x 19 columns]}
我需要数据框在其自己的列中包含帐户#。
我尝试了以下代码:
df= pd.concat(dict.values(), ignore_index= True)
此输出几乎可以工作,但没有 Acct#,我得到以下信息:
ds trend yhat y
0 2018-05-01 00:00:00 1.268612 0.679369 2.554900
1 2018-05-01 01:00:00 1.268372 0.089233 2.022369
2 2018-05-01 02:00:00 0.575161 -0.795286 0.906530
3 2018-05-01 00:00:00 0.575119 -0.456240 1.26193
4 2018-05-01 01:00:00 0.575140 -0.687562 1.033594
5 2018-05-01 02:00:00 0.575161 -0.795286 0.906530
我想要的输出如下所示
Acct # ds trend yhat y
0 Acct1 2018-05-01 00:00:00 1.268612 0.679369 2.554900
1 Acct1 2018-05-01 01:00:00 1.268372 0.089233 2.022369
2 Acct1 2018-05-01 02:00:00 0.575161 -0.795286 0.906530
3 Acct2 2018-05-01 00:00:00 0.575119 -0.456240 1.26193
4 Acct2 2018-05-01 01:00:00 0.575140 -0.687562 1.033594
5 Acct2 2018-05-01 02:00:00 0.575161 -0.795286 0.906530
假设字典是d
。将 pd.concat
的选项 keys
与一些清理命令一起使用
df = (pd.concat(d.values(), keys=d.keys())
.reset_index()
.drop('level_1',1).rename(columns={'level_0': 'Acct#'}))
Out[207]:
Acct# ds trend yhat y
0 Acct1 2018-05-01 00:00:00 1.268612 0.679369 2.554900
1 Acct1 2018-05-01 01:00:00 1.268372 0.089233 2.022369
2 Acct1 2018-05-01 02:00:00 1.268132 -0.256185 1.640524
3 Acct2 2018-05-01 00:00:00 0.575119 -0.456240 1.261930
4 Acct2 2018-05-01 01:00:00 0.575140 -0.687562 1.033594
5 Acct2 2018-05-01 02:00:00 0.575161 -0.795286 0.906530
我有一个包含 10,000 多个帐户的嵌套字典。我需要一个强大的解决方案。下面是一个需要缩放到n的例子。
以 acct # 为键的嵌套字典如下所示:
{'Acct301':
ds trend yhat y
0 2018-05-01 00:00:00 1.268612 0.679369 2.554900
1 2018-05-01 01:00:00 1.268372 0.089233 2.022369
2 2018-05-01 02:00:00 1.268132 -0.256185 1.640524
[744 rows x 19 columns],
'Acct2':
ds trend yhat y
0 2018-05-01 00:00:00 0.575119 -0.456240 1.26193
1 2018-05-01 01:00:00 0.575140 -0.687562 1.033594
2 2018-05-01 02:00:00 0.575161 -0.795286 0.906530
[744 rows x 19 columns]}
我需要数据框在其自己的列中包含帐户#。
我尝试了以下代码:
df= pd.concat(dict.values(), ignore_index= True)
此输出几乎可以工作,但没有 Acct#,我得到以下信息:
ds trend yhat y
0 2018-05-01 00:00:00 1.268612 0.679369 2.554900
1 2018-05-01 01:00:00 1.268372 0.089233 2.022369
2 2018-05-01 02:00:00 0.575161 -0.795286 0.906530
3 2018-05-01 00:00:00 0.575119 -0.456240 1.26193
4 2018-05-01 01:00:00 0.575140 -0.687562 1.033594
5 2018-05-01 02:00:00 0.575161 -0.795286 0.906530
我想要的输出如下所示
Acct # ds trend yhat y
0 Acct1 2018-05-01 00:00:00 1.268612 0.679369 2.554900
1 Acct1 2018-05-01 01:00:00 1.268372 0.089233 2.022369
2 Acct1 2018-05-01 02:00:00 0.575161 -0.795286 0.906530
3 Acct2 2018-05-01 00:00:00 0.575119 -0.456240 1.26193
4 Acct2 2018-05-01 01:00:00 0.575140 -0.687562 1.033594
5 Acct2 2018-05-01 02:00:00 0.575161 -0.795286 0.906530
假设字典是d
。将 pd.concat
的选项 keys
与一些清理命令一起使用
df = (pd.concat(d.values(), keys=d.keys())
.reset_index()
.drop('level_1',1).rename(columns={'level_0': 'Acct#'}))
Out[207]:
Acct# ds trend yhat y
0 Acct1 2018-05-01 00:00:00 1.268612 0.679369 2.554900
1 Acct1 2018-05-01 01:00:00 1.268372 0.089233 2.022369
2 Acct1 2018-05-01 02:00:00 1.268132 -0.256185 1.640524
3 Acct2 2018-05-01 00:00:00 0.575119 -0.456240 1.261930
4 Acct2 2018-05-01 01:00:00 0.575140 -0.687562 1.033594
5 Acct2 2018-05-01 02:00:00 0.575161 -0.795286 0.906530