Pandas - получить исходный кадр данных из преобразованного кадра данных - PullRequest
1 голос
/ 13 марта 2019

Я построил информационный фрейм, чтобы сохранить составляющую фондового индекса с течением времени, выполнив следующие шаги:

1) Сначала я загружаю необработанные данные через провайдера данных и сохраняю их в формате

2) Преобразовать в фрейм данных, чтобы получить:

constituent_pd = pd.DataFrame.from_dict(constituent, orient='index')

index  col1     col2    col3  etc...
1/1/92 stockA  stockB  NA     etc...
2/1/92 stockB  stockC  stockD etc...

3) Превратить в логический кадр данных с:

constituent_bol = pd.get_dummies(constituent_pd.stack()).max(level=0).astype(bool)

index  stockA  stockB  stockC etc...
1/1/92 True    True    False  etc...
2/1/92 False   True    True   etc...

Оттуда я пытался найти способ быстро обновить мою таблицу. Чтобы сделать это, мне нужно было бы снова преобразовать конституционный_бин в исходную словарную форму, объединить его с новым словарём (для более поздних дат) и перезапустить весь процесс.

step1 = constituent_bol.astype('int32')
step2 = step1[step1 ==1].stack().reset_index().drop(0,1).set_index('level_0')

1/1/92 stockA
1/1/92 stockB
etc...

и я не знаю, как изменить этот длинный фрейм данных, например ,entent_pd, чтобы получить ДИК позже.

Спасибо за любую помощь!

1 Ответ

0 голосов
/ 13 марта 2019

Проблема в функции max(level=0) утеряны исходные имена столбцов, поскольку они агрегируются по первому уровню.

Так близко, что вам нужно, можно использовать GroupBy.cumcount для счетчика имен новых столбцов:

print (constituent_pd)
          col1    col2    col3
index                         
1/1/92  stockA  stockB     NaN
2/1/92  stockB  stockC  stockD

print (pd.get_dummies(constituent_pd.stack()))
             stockA  stockB  stockC  stockD
index                                      
1/1/92 col1       1       0       0       0
       col2       0       1       0       0
2/1/92 col1       0       1       0       0
       col2       0       0       1       0
       col3       0       0       0       1

print (pd.get_dummies(constituent_pd.stack()).max(level=0))
        stockA  stockB  stockC  stockD
index                                 
1/1/92       1       1       0       0
2/1/92       0       1       1       1

constituent_bol = pd.get_dummies(constituent_pd.stack()).max(level=0).astype(bool)
print (constituent_bol)
        stockA  stockB  stockC  stockD
index                                 
1/1/92    True    True   False   False
2/1/92   False    True    True    True

step1 = constituent_bol.astype('int32')
step2 = step1[step1 == 1].stack().reset_index().drop(0,1)
step2 = step2.set_index(['index', step2.groupby('index').cumcount()])['level_1'].unstack()
print (step2)
             0       1       2
index                         
1/1/92  stockA  stockB     NaN
2/1/92  stockB  stockC  stockD
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...