Based on the link you provided, you'd want to define a sample_percent instead of a sample_size. Then, when iterating over groups.items(), you'd define sample_size by rounding up the number of points times your percent. Something like this:
import arcpy, random
from collections import defaultdict
from math import ceil
points = 'points' #Layer name
groupfield = 'fishnet_id' #Some id identifying each fishnet cell
sample_percent = 0.5 #Percent (0-1) of points in each cell to select
oidfield = arcpy.Describe(points).OIDFieldName
groups = defaultdict(list)
with arcpy.da.SearchCursor(points, [groupfield, oidfield]) as cursor:
for key,value in cursor:
groups[key].append(value)
oidlist = []
for key,value in groups.items():
sample_size = ceil(len(value)*sample_percent)
oidlist.extend(random.sample(value,sample_size))
sql = """{0} IN({1})""".format(arcpy.AddFieldDelimiters(points,oidfield), ','.join([str(i) for i in oidlist]))
arcpy.SelectLayerByAttribute_management(points, where_clause=sql)