Пытаюсь передать столбцы в функцию, получаю ошибку ключа (Pandas)

У меня есть этот блок кода:

def euc_dist(x,y):
    return ((x[0] - y[0])**2 +(x[1] - y[1])**2 )**(1/2)

def dist(s1,s2):    
    distances = [euc_dist(s1[i],s2[i]) for i in range(s1.shape[0])]
    return pd.Series(distances)

distances_df = tracking_data.loc[:,tracking_data[['away_player10_point', 'away_player9_point', 'away_player8_point', 'away_player7_point', 'away_player6_point', 'away_player5_point', 'away_player4_point', 'away_player3_point', 'away_player2_point', 'away_player1_point', 'away_player11_point', 'home_player1_point', 'home_player2_point', 'home_player3_point', 'home_player4_point', 'home_player5_point', 'home_player6_point', 'home_player7_point', 'home_player8_point', 'home_player9_point', 'home_player10_point', 'home_player11_point']].apply(tuple, axis = 1)].apply(dist, args = (tracking_data["ball_point"]))
tracking_data["closest"] = distances_df.idxmin(axis = 1).apply(lambda x: str(x)[:-6])

Я получаю эту ошибку при запуске:

KeyError: "Ни один из [Индекс([
((-22,06, -8,32), (-0,12, 21,38), (-1,49, -9,62), (-0,26, -28,52), (-19,32, 16,22), (-15,11, 0,43), (-7,69, 32,87), (0,45, -0,25), (-9,88, 7,67), (-47,29, -0,14), (-18,1, -25,42), (0,46, -19,84), (7,58, 4,82), (15,33, -23,38), (21,08, 6,57), (14,98, 20,7), (8,14, -4,27), (21,36, -9,06), (46,92, 0,01), (0,29, 9,88), (0,67, 22,24), (-0,06, -9,07)),\n
((-22,06, -8,32), (-0,07, 21,39), (-1,47, -9,64), (-0,23, -28,51), (-19,31, 16,22), (-15,1, 0,42), (-7,68, 32,88), (0,46, -0,26), (-9,87, 7,7), (-47,3, -0,15), (-18,09, -25,41), (0,43, -19,83), (7,5600000000000005, 4,83), (15,31, -23,38), (21,06, 6,57), (14,97, 20,72), (8,12, -4,28), (21,33, -9,04), (46,91, 0,02), (0,25, 9,85), (0,67, 22,24), (-0,11, -9,05)),\n
((-22,06, -8,33), (-0,03, 21,39), (-1,43, -9,67), (-0,2, -28,5), (-19,29, 16,24), (-15,09, 0,42), (-7,66, 32,9), (0,47000000000000003, -0,27), (-9,85, 7,72), (-47,31, -0,16), (-18,08, -25,4), (0,39, -19,83), (7,55, 4,85), (15,28, -23,38), (21,03, 6,57), (14,95, 20,74), (8,09, -4,28), (21,28, -9,02), (46,91, 0,03), (0,2, 9,82), (0,66, 22,24), (-0,16, -9,02)),\n ((-22,06, -8,34), (0,01, 21,39), (-1,3900000000000001, -9,7), (-0,16, -28,5), (-19,28, 16,25), (-15,08, 0,42), (-7,64, 32,92), (0,49, -0,27), (-9,84, 7,75), (-47,32, -0,16), (-18,07, -25,4), (0,35000000000000. ..

Пожалуйста, обратитесь к этой записной книжке, чтобы увидеть мою таблицу, так как она слишком велика для размещения здесь. Работа, относящаяся к этому вопросу, находится внизу. https://github.com/piercepatrick/Articles_EDA/blob/main/nashSCProject.ipynb

Я пытался решить эту проблему в своем предыдущем вопросе: Pandas Dataframe: найти столбец с ближайшей координатной точкой к другой координатной точке столбца

У меня есть подозрение, что эта проблема заключается в исходных данных, поскольку я изначально загрузил их как JSON?

Ваши исходные столбцы данных похожи на «home_player1_x» и «home_player1_y», почему вы используете «home_player1_point»?

Pablo C 14.12.2020 02:33

Не уверен, думал, что мне нужно для формулы евклидова расстояния.

pmp1321 14.12.2020 02:35

Плюс его половина столбцов для передачи в функцию.

pmp1321 14.12.2020 02:39

это было правильно, извините

Pablo C 14.12.2020 02:54
Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
1
4
274
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Сначала сбросьте индекс с помощью

tracking_data = tracking_data.reset_index()

Затем измените

distances_df = tracking_data.loc[:,tracking_data[['away_player10_point', 'away_player9_point', 'away_player8_point', 'away_player7_point', 'away_player6_point', 'away_player5_point', 'away_player4_point', 'away_player3_point', 'away_player2_point', 'away_player1_point', 'away_player11_point', 'home_player1_point', 'home_player2_point', 'home_player3_point', 'home_player4_point', 'home_player5_point', 'home_player6_point', 'home_player7_point', 'home_player8_point', 'home_player9_point', 'home_player10_point', 'home_player11_point']].apply(tuple, axis = 1)].apply(dist, args = (tracking_data["ball_point"]))

для

distances_df = tracking_data[['away_player10_point', 'away_player9_point', 'away_player8_point', 'away_player7_point', 'away_player6_point', 'away_player5_point', 'away_player4_point', 'away_player3_point', 'away_player2_point', 'away_player1_point', 'away_player11_point', 'home_player1_point', 'home_player2_point', 'home_player3_point', 'home_player4_point', 'home_player5_point', 'home_player6_point', 'home_player7_point', 'home_player8_point', 'home_player9_point', 'home_player10_point', 'home_player11_point']].apply(dist, args = (tracking_data["ball_point"],))

ValueError: истинное значение серии неоднозначно. Используйте a.empty, a.bool(), a.item(), a.any() или a.all(). Глядя на это, может быть, смогу исправить себя. Я видел эту ошибку раньше.

pmp1321 14.12.2020 02:52

KeyError: 0 Если вы зайдете на github, вы сможете загрузить блокнот, чтобы вы могли протестировать что-то, это может быть проще?

pmp1321 14.12.2020 02:56

@ pmp1321 pmp1321 Я не могу загрузить файл json

Pablo C 14.12.2020 03:01

@ pmp1321 tracking_data[['away_player10_point', 'away_player9_point', 'away_player8_point', 'away_player7_point', 'away_player6_point', 'away_player5_point', 'away_player4_point', 'away_player3_point', 'away_player2_point', 'away_player1_point', 'away_player11_point', 'home_player1_point', 'home_player2_point', 'home_player3_point', 'home_player4_point', 'home_player5_point', 'home_player6_point', 'home_player7_point', 'home_player8_point', 'home_player9_point', 'home_player10_point', 'home_player11_point']] что-то возвращает?

Pablo C 14.12.2020 03:03

Да, эта команда отображает фрейм данных с этими столбцами

pmp1321 14.12.2020 03:06

ты уверен, что пишешь именно .apply(dist, args = (tracking_data["ball_point"],)) после этого?

Pablo C 14.12.2020 03:12

Если у вас больше нет идей, я думаю, что я сдамся. Я ценю твою помощь, чувак.

pmp1321 14.12.2020 03:47

@ pmp1321 pmp1321 ты проверил мое обновление? reset_index вещь

Pablo C 14.12.2020 03:50

Нет, куда вы это отправили? Не пытайтесь сейчас

pmp1321 14.12.2020 04:18

@pmp1321 pmp1321 Я отредактировал этот пост, у меня сработало

Pablo C 14.12.2020 04:19

ОНО РАБОТАЕТ! Спасибо!

pmp1321 14.12.2020 04:26

@ pmp1321 хорошо! :D

Pablo C 14.12.2020 04:27

@ pmp1321, пожалуйста, отметьте его как принятое и рассмотрите возможность голосования.

Pablo C 14.12.2020 04:30

Другие вопросы по теме