The reason why you only see the count and the vendor name is because that is all you are grouping by. Suppose in the database, you have 5 different Vendor A shown below.
vendor_name   | product_name 
-----------------------------
Vendor A      | test        
Vendor A      | test2        
Vendor A      | test3        
Vendor A      | test4 
Vendor A      | test5  
...     
When you run your query, SQL will not know what to display for product_name as the group_by will only show 1 row instead of 5. Have a read about it here. 
To achieve this you will need to either to group by the other columns too or use a min/max select to pick a value to display. Here is an example:
vendor_line_items = LineItem.select('COUNT(*) AS count', 'vendor_name', 'MAX(product_name)').group(:vendor_name).order('count DESC')
Now each of those results, you can call the attributes method.
Which will give you the following hash:
vendor_line_items.each do |x|
  result = x.attributes
  # Here result will be a hash.
  # {"count" => 5, "vendor_name" => "Vendor A", "product_name" => "test5"}
end