Reshape very large dataframe

Viewed 113

I am trying to reshape a very large dataframe df1 to df2 but due its size I am getting a memory error:

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) 

This is what I have tried so far:

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()

but it only works for the small example. Is there a way to do this in small individual chunks?

1 Answers

not sure if the memory error will go away, but I'd use this:

df2 = df1.stack().reset_index().rename(columns={'level_0': 'Ticker', 'level_1': 'Date', 0: 'flag'})
df2 = df2[df2['flag'] == 1]
df2 = df2[['Ticker', 'Date']].set_index('Ticker')
Related