этот 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']])
поиск ближайшего наименьшего индекса списка
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, большое спасибо за объяснение