Почему лямбда не работает со значением свойства?

этот df2['CLINE_TYPE']:

Increase_FALSE
Decrease
Increase_FALSE
Increase_SUPERPOSITION
Decrease_FALSE
Increase
Increase_SUPERPOSITION
Decrease_FALSE
Increase
Increase_SUPERPOSITION

эта функция:

def nearest(lst, target):
  return min(lst, key=lambda x: abs(x-target))

Мне нужно получить значение от лямды, я получаю сообщение об ошибке: «AttributeError: объект «str» не имеет атрибута «значения»

весь код:

import pandas as pd
import numpy as np
import re

def nearest(lst, target):
  return min(lst, key=lambda x: abs(x-target))

    df2['res']=np.nan
    
    df2['res'] = df2['CLINE_TYPE'].apply(lambda x: nearest(df2.loc[df2['CLINE_TYPE'].str.contains('Increase')].index.to_list(), x.name)
                                        if bool(re.match(r'Decrease', x.values))==True else
                                        nearest(df2.loc[df2['CLINE_TYPE'].str.contains('Decrease')].index.to_list(), x.name))
    
    print(df2[['CLINE_TYPE','res']])

поиск ближайшего наименьшего индекса списка

Почему в 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 может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
0
0
31
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

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

Series.apply передать значение в Series для работы, поэтому обычно у него нет атрибута. Поскольку вы хотите получить доступ к индексу строки, вам нужно DataFrame.apply:

df2['res'] = df2.apply(lambda row: nearest(df2.loc[df2['CLINE_TYPE'].str.contains('Increase')].index.to_list(), row.name)
                       if bool(re.match(r'Decrease', row['CLINE_TYPE']))==True else
                       nearest(df2.loc[df2['CLINE_TYPE'].str.contains('Decrease')].index.to_list(), row.name), axis=1)
print(df2[['CLINE_TYPE','res']])

               CLINE_TYPE  res
0          Increase_FALSE    1
1                Decrease    0
2          Increase_FALSE    1
3  Increase_SUPERPOSITION    4
4          Decrease_FALSE    3
5                Increase    4
6  Increase_SUPERPOSITION    7
7          Decrease_FALSE    6
8                Increase    7
9  Increase_SUPERPOSITION    7

Ynjxsjmh, большое спасибо за объяснение

максим ильин 07.05.2022 12:34

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