Применение функции с использованием 2 столбцов данных в качестве аргументов

1

Я хочу применить функцию, которая создает столбец на основе переменных в двух других столбцах.

  1. Один столбец 'SSPstaterank' возвращает рейтинг пригорода.

  2. Второй столбец '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)
Теги:
pandas

1 ответ

4

Используйте 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
  • 1
    Второе решение, вероятно, быстрее; использование df.apply (..., axis = 1) обычно довольно медленное.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню