Изменить структуру данных, избегая ошибок памяти - PullRequest
0 голосов
/ 29 декабря 2018

Я хотел бы изменить форму большого фрейма данных из формата в df1 в df2 ::

Я уже задавал этот вопрос ранее в этом посте:

Изменение формы и фильтра pandas dataframe

и получили 3 предложенных подхода, которые все работают для приведенного ниже минимального примера, однако все они приводят к ошибке памяти при использовании на реальном кадре данных.

dict1 = [{'12/21/18': 0,'12/22/18': 0,'12/23/18': 1,'12/24/18': 1},
 {'12/21/18': 1,'12/22/18': 1,'12/23/18': 0,'12/24/18': 1},
 {'12/21/18': 0,'12/22/18': 1,'12/23/18': 0,'12/24/18': 0},
 {'12/21/18': 1,'12/22/18': 0,'12/23/18': 1,'12/24/18': 1}]


df1 = pd.DataFrame(dict1, index= ['AAPL','CSCO','GE','MSFT' ])

dict2 = [{'Ticker': 'AAPL','Date': '12/23/18'},
 {'Ticker': 'AAPL','Date': '12/24/18'},
 {'Ticker': 'CSCO','Date': '12/22/18'},
 {'Ticker': 'CSCO','Date': '12/24/18'},
 {'Ticker': 'GE',  'Date': '12/22/18'},
 {'Ticker': 'MSFT','Date': '12/24/18'}]


df2 = pd.DataFrame(dict2) 

Например, это работает для небольшого примера:

df1.index.name = 'Ticker' 
df2 = df1.reset_index().melt(id_vars='Ticker',var_name='Date') 

df2 = df2[df2.value == 1].set_index('Ticker').filter(['Date','Ticker']).sort_index()

Кто-нибудь может подсказать, как мне избежать ошибки памяти?Был бы способ запустить все это маленькими кусками и сохранить их между ними, чтобы избежать этого?

1 Ответ

0 голосов
/ 29 декабря 2018

Я не уверен, что вы пробовали стек .

import pandas as pd

dict1 = [{'12/21/18': 0,'12/22/18': 0,'12/23/18': 1,'12/24/18': 1},
 {'12/21/18': 1,'12/22/18': 1,'12/23/18': 0,'12/24/18': 1},
 {'12/21/18': 0,'12/22/18': 1,'12/23/18': 0,'12/24/18': 0},
 {'12/21/18': 1,'12/22/18': 0,'12/23/18': 1,'12/24/18': 1}]

df1 = pd.DataFrame(dict1, index= ['AAPL','CSCO','GE','MSFT'])
df1.index.name = 'Ticker'

df3 = df1.stack()
df3 = df3[df3 == 1].reset_index(level=1)
df3.rename(columns={'level_1': 'Date'})[['Date']]

Output

...