Оценить строку в столбце dataframe с переменной - PullRequest
0 голосов
/ 06 декабря 2018

У меня есть фрейм данных следующего формата:

Name           Factor     Expression   Year 
Hydro          0.075            <10    2010  
Hydro          0.075            >10    2010  
Hydro          0.075            <10    2011  
Hydro          0.075            >10    2011
Hydro          0.075            <10    2012

И следующая переменная: i=3.

Я хотел бы отфильтровать фрейм данных, где оценивается столбец Expressionкак true, когда переменная i находится в левой части строки в столбце выражения.

Например, первая строка будет иметь значение true как 3<10.

В результате я хотел бы получить следующее:

Name           Factor     Expression   Year 
Hydro          0.075            <10    2010  
Hydro          0.075            <10    2011  
Hydro          0.075            <10    2012

Спасибо за любую помощь.

1 Ответ

0 голосов
/ 06 декабря 2018

Pandas имеет более безопасную версию eval, которая поддерживает ограниченное количество операций.К счастью, > и < работают, и вы можете использовать это вместе с конкатенацией строк:

i = '3'
idx = pd.eval(i + df.Expression)
df.loc[idx]

    Name  Factor Expression  Year
0  Hydro   0.075        <10  2010
2  Hydro   0.075        <10  2011
4  Hydro   0.075        <10  2012

Как заметил @coldspeed, вышеприведенный подходработает только с фреймами данных, которые < 100 строк *, что не идеально.Он также предложил следующее решение:

df[[pd.eval(f"{i}{j}") for j in df['Expression']]]

* Вышеупомянутое ограничение более подробно обсуждается в следующем вопросе: AttributeError: у объекта 'PandasExprVisitor' нет атрибута 'visit_Ellipsis', используяПанды Эвал

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...