我想将大型数据框从df1的格式重塑为df2 ::
我之前在这篇文章中问过这个问题:
Reshape and filter 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()
谁能建议我如何避免出现内存错误?是否有一种方法可以将整个事情分成较小的小块运行并保存在中间,以免发生这种情况?
答案 0 :(得分:0)
我不确定您是否尝试过stack。
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']]