Portable means PCL and shared is Shared Asset Project. Essentially both can be used for sharing code across platforms. You can find the difference explained by Xamarin in their documentation.
In simple my own words, when code sharing is done with a PCL, the shared code is compiled initially and then is referenced by Android and iOS projects. So only code that can be compiled by all platforms can be included in PCL type. Whereas in shared asset project, the code files are added to individual platforms and then compiled. So we can include platform specific codes using Pre-processor directives. Each method has its own pros and cons. You can decide which to chose after considering them all.