Как вывести список совпадающих значений через функцию?
Есть список:
eject = [-7.1, 4.2, 6.1]
Есть датафрейм:
df1 = pd.DataFrame({
'year': [2017, 2018, 2019, 2020, 2011, 2032, 2013, 2014],
'list': [-4.4, 6.1, -5.5, -3.3, -7.1, -3.1, -5.2, 4.2]
})
Необходимо из списка с помощью функции def вывести значения:
[2011, 2014, 2018]
Пробовал так, но не работает(:
def looc1(duf, doc, listt):
miine = []
for i in eject:
miine.append(duf[listt == i].doc.values[0])
return miine
looc1(df1, year, df1.list)
Хотя без def работает нормально:
miine = []
for i in eject(df1.list):
miine.append(df1[df1.list == i].year.values[0])
print(miine)
Ответы (2 шт):
Автор решения: strawdog
→ Ссылка
import pandas as pd
eject = [-7.1, 4.2, 6.1]
df1 = pd.DataFrame({
'year': [2017, 2018, 2019, 2020, 2011, 2032, 2013, 2014],
'list': [-4.4, 6.1, -5.5, -3.3, -7.1, -3.1, -5.2, 4.2]
})
def myfunc(df, lst):
return df[df.loc[:,"list"].isin(lst)]["year"].to_list()
myfunc(df1, eject)
результат:
[2018, 2011, 2014]
Автор решения: CrazyElf
→ Ссылка
Ваш код чинится так:
def looc1(duf, doc, listt):
miine = []
for i in eject:
miine.append(duf[listt == i][doc].values[0])
return miine
print(looc1(df1, 'year', df1.list))
Но при этом вы не передаёте список eject в функцию, а используете его напрямую, что не есть хорошо. И сделать это всё можно гораздо короче:
def looc2(df, where, col, eject):
return df.loc[df[where].isin(eject), col].tolist()
print(looc2(df1, 'list', 'year', eject))
Вывод:
[2018, 2011, 2014]