title: Define a new column based on preferences in one set of columns, and available resources in another
body: <p>I have a dataframe with many columns, of which 7 are relevant here.</p>
  
  <pre><code>df1=pd.DataFrame({'Shipment ID':[1,2,3,4,5,6],'Pref 1':['UPS','DHL','DHL','ARA','USPS','FED'],'Pref 2':['DHL','','FED','FED','UPS','USPS'],'Pref 3':['FED','','','DHL','ARA',''],'BudgetUPS':[NaN,'No','Yes',NaN,'No','Yes'],'BudgetUSPS':['Yes','Yes','Yes',NaN,'Yes','No'],'BudgetFED':['No','Yes',NaN,'Yes','Yes','No'],'BudgetARA':['Yes',NaN,NaN,NaN,NaN,'Yes'],'BudgetDHL':['No','Yes','Yes',NaN,'Yes','Yes']})
  </code></pre>
  
  <p>The data here represents the top 3 customer preferences for a shipping agent for each of the shipments being generated by an e-commerce site. The Budget columns specify whether the budget for the corresponding shipping agent is available, not available, or unknown (due to query failure).</p>
  
  <p>What I need to generate is a column that picks up the top two (or one, or none) of the preferences for each shipment ID and create entries (column name: Prefnbudget) like "FED UPS", "USPS", "DHL ARA", "None" for each shipment. The purpose of this step is to a) detect if a shipment can be processed with customer preference, and the budget constraint (to prevent deadlocks), b) query the customer with a confirmation.</p>
  
  <p>I would like to make the answer as pythonic as possible. It is certainly easy to do this in a loop over a list ['DHL','UPS','USPS','ARA','FED'], etc. but I want something that is more vectorized, and pithily compact.</p>