Я хочу применить функцию, которая создает столбец на основе переменных в двух других столбцах.
Один столбец 'SSPstaterank'
возвращает рейтинг пригорода.
Второй столбец 'SSPstaterank%'
возвращает процентиль 'SSPstaterank%'
пригорода.
Я думал, что этот код будет работать, но он возвращает:
TypeError: ("Объект DataFrame не может быть вызван", "произошел с индексом 0")
def func1 (a,b):
if a == 1:
return 'the #1 suburb'
elif b >= 0.95:
return 'ranked top 5% of suburbs'
elif b >= 0.9:
return 'ranked top 10% of suburbs'
else:
return 'none'
df2['rankdescript'] = df2.apply(lambda x: df2(x['SSPstaterank'], x['SSPstaterank%']), axis=1)
Используйте func1
вместо df2
:
df2['rankdescript'] = df2.apply(lambda x: func1(x['SSPstaterank'],x['SSPstaterank%']), axis=1)
Другое решение с numpy.select
должно быть быстрее:
df2 = pd.DataFrame({'SSPstaterank':[2,1,2,2,7],
'SSPstaterank%':[.99,.93,.93,.98,.23]})
m1 = df2['SSPstaterank'] == 1
m2 = df2['SSPstaterank%'] >= 0.95
m3 = df2['SSPstaterank%'] >= 0.9
masks = [m1, m2, m3]
vals = ['the #1 suburb','ranked top 5% of suburbs','ranked top 10% of suburbs']
df2['rankdescript'] = np.select(masks, vals, default='not matched')
print (df2)
SSPstaterank SSPstaterank% rankdescript
0 2 0.99 ranked top 5% of suburbs
1 1 0.93 the #1 suburb
2 2 0.93 ranked top 10% of suburbs
3 2 0.98 ranked top 5% of suburbs
4 7 0.23 not matched