Фрейм данных Pandas из вложенного словаря, добавляющий ключ dict в собственный столбец - PullRequest
1 голос
/ 06 октября 2019

У меня есть вложенный словарь с более чем 10000 учетных записей. Мне нужно надежное решение. Ниже приведен пример, который необходимо масштабировать до 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

1 Ответ

0 голосов
/ 06 октября 2019

Допустим, словарь равен d. Используйте параметр keys из pd.concat с некоторыми командами очистки

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
...