Используя apply, я считаю его более читаемым и поддерживаемым
data = [["count","i","a","N"],
[1,1.4,1.4,0],
[1,0,0,1],
[2,110,140,0],
[3,0,0,3],
[4,3.5,5.1,0],
[4,19,22,0],
[50,0,17,21],
[25,0,0,25]]
def cond(r):
val = "tbd"
if r.N==0: val = str(r.i)+"-"+str(r.a)
if r["count"]==r.N: val = "None"
if (r['count'] > r['N']) and (r['N'] != 0): val = 'None to Many'
return val
df = pd.DataFrame(data[1:], columns=data[0])
df["rng"] = df.apply(lambda r: cond(r), axis=1)