title: Find the column names which have top 3 largest values for each row
body: <p>For example the data look like:</p>
  
  <pre><code>df={'a1':[5,6,3,2,5],'a2':[23,43,56,2,6], 'a3':[4,2,3,6,7], 'a4':[1,2,1,3,2],'a5':[4,98,23,5,7],'a6':[5,43,3,2,5]}
  x=pd.DataFrame(df)
  Out[260]: 
      a1  a2  a3  a4  a5  a6
  0   5  23   4   1   4   5
  1   6  43   2   2   98   43
  2   3  56   3   1  23   3
  3   2   2   6   3   5   2
  4   5   6   7   2   7   5
  </code></pre>
  
  <p>I need the result to look like:</p>
  
  <pre><code>top1 top2 top3
  a2   a1   a6
  a5   a2   a6
  ....
  </code></pre>
  
  <p>I've seen answer to a previous questions (see below) that recommends idxmax. But how to handle top n values (n>1)?</p>
  
  <p><a href="https://stackoverflow.com/questions/29919306/find-the-column-name-which-has-maximum-value-for-each-row-pandas">Find the column name which has the maximum value for each row</a></p>
  
  <p>Update:</p>
  
  <p>I find the answer very useful but the only thing is that my data is long so have to figure out a way to bypass that. I ended up saving the data to a csv file and then reading it back in in chunks. here is the code I used:</p>
  
  <pre><code>data = pd.read_csv('xxx.csv', chunksize=1000)
  rslt = pd.DataFrame(np.zeros((0,3)), columns=['top1','top2','top3'])
  for chunk in data:
      x=pd.DataFrame(chunk).T
      for i in x.columns:
          df1row = pd.DataFrame(x.nlargest(3, i).index.tolist(), index=['top1','top2','top3']).T
          rslt = pd.concat([rslt, df1row], axis=0)
  rslt=rslt.reset_index(drop=True)
  </code></pre>