Как использовать динамическую строку для фильтрации фрейма данных с помощью Python Pandas

1

DataFrame

    PROJECT  CLUSTER_x  MARKET_x  CLUSTER_y  MARKET_y     Exist
0   P17      A          CHINA     C          CHINA        both
1   P18      P          INDIA     P          INDIA        both
2   P16      P          AMERICA   P          AMERICA      both
3   P19      P          INDIA     P          JAPAN        both

Этот ниже код работает отлично и дает результат как индекс 0 и 3

df_mismatched = df_common[ (df_common['MARKET_x'] != df_common['MARKET_y']) | (df_common['CLUSTER_x'] != df_common['CLUSTER_y']) ]

Как мы можем динамически строить такие критерии фильтрации? что-то вроде ниже кода, так что в следующий раз жесткая кодировка не понадобится

str_common = '(df_common["MARKET_x"] != df_common["MARKET_y"]) | (df_common["CLUSTER_x"] != df_common["CLUSTER_y"])'
df_mismatched = df_common[str_common]
  • 0
    Может быть, что-то вроде запроса ?, например, con = "(MARKET_x!=MARKET_y)|(CLUSTER_x!=CLUSTER_y)" затем df.query(con) .
  • 1
    @SandeepKadapa - хорошо работает, создай ответ;)
Показать ещё 2 комментария
Теги:
pandas

1 ответ

2
Лучший ответ

Для динамической цели вы можете использовать структуру query SQL в python, например:

con = "(MARKET_x!=MARKET_y)|(CLUSTER_x!=CLUSTER_y)"
print(df.query(con))

  PROJECT CLUSTER_x MARKET_x CLUSTER_y MARKET_y Exist
0     P17         A    CHINA         C    CHINA  both
3     P18         P    INDIA         P    JAPAN  both

Помните, что если имена столбцов имеют пробелы или специальные символы, они не могут получить правильные результаты.

Ещё вопросы

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