Как применить пользовательскую функцию к 2 столбцам в панде? - PullRequest
1 голос
/ 14 октября 2019

У меня есть кадр данных pandas с двумя столбцами, скажем, A и B.
Все элементы столбцов A и B имеют тип string.
Например,

        A      B  
0      str1   str2  
1      str3   str4  
2      str5   str6  
3      str7   str8  

Итак, яесть функция f, которая принимает в качестве входных данных 2 строки, делает некоторые нетривиальные вещи и возвращает вывод.
например def f(x, y): "do something to x and y to make z" return z
То, что я хочу, чтобы вывод был похож на

        A      B      C
0      str1   str2  f(str1, str2)
1      str3   str4  f(str3, str4)
2      str5   str6  f(str5, str6)
3      str7   str8  f(str7, str8)

Iне хочу использовать циклы, так как это очень большой массив данных.
Как применить векторную функцию f к столбцам A и B?

Ответы [ 2 ]

2 голосов
/ 14 октября 2019

Как применить векторную функцию f к столбцам A и B?

Это возможно с помощью:

df['new'] = df.apply(lambda x: f(x['A'], x['B']), axis=1)

, но это не таквекторизация, это петли под капотами.

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

0 голосов
/ 14 октября 2019

Вы можете передавать столбцы в функцию в качестве аргументов, но это зависит от функции, которая у вас есть. Например:

df['C'] = np.add(df['A'], df['B'])

Результат:

      A     B         C
0  str1  str2  str1str2
1  str3  str4  str3str4
2  str5  str6  str5str6
3  str7  str8  str7str8
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...