我正在尝试将一个非常大的数据帧df1重塑为df2,但由于其大小,我收到一个内存错误:
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()
但这只适用于一个小例子。有没有一种方法可以在一小块一小块的地方做到这一点?
最佳答案
不确定内存错误是否会消失,但我会使用这个:
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')
关于python - 重塑非常大的数据框,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/53975241/