Оценить строку в столбце dataframe с переменной

1

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

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.

Я хотел бы отфильтровать dataframe, где столбец 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

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

Теги:
pandas

1 ответ

2

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

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, вышеупомянутый подход работает только с DataFrames, < 100 строк *, что не является идеальным. Он также предложил следующее решение:

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

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

  • 0
    Осторожно, pd.eval будет работать, только если ваш DataFrame имеет 100 строк или меньше.
  • 0
    Хм, не знал, что, действительно, немного ограничивает вещи
Показать ещё 4 комментария

Ещё вопросы

Сообщество Overcoder
Наверх
Меню