Фрейм данных Pandas фильтрует динамические столбцы

#pandas

#pandas

Вопрос:

У меня есть несколько наборов данных, которые необходимы для обработки pandas.

 DF 1:
DATE DATA1_ID DATA
20200101 XXX 123
20200102 YYY 456
...

DF 2:
DATE DATA2_ID DATA
20200101 AAA 098
20200102 BBB 765
...
  

Чего я хочу добиться, так это иметь общий фильтр для этих двух таблиц, например, используя df.loc[df.DATA1_ID == «XXX»] без необходимости изменять имена столбцов в любом из фреймов данных.

Я хочу выполнить поиск по этому «идентификатору» на основе столбцов IDS, которые будут работать в обоих фреймах данных.

Пример поведения при запуске скрипта в обоих фреймах данных:

  1. Идентификатор фильтрации = XXX. Результатом будет DF 1: 20200101 XXX 123. DF 2:
  2. Идентификатор фильтрации = AAA. Результатом будет DF 1: . DF 2: 20200101 AAA 098
  3. Идентификатор фильтрации = OOO. Результатом будет DF 1: . DF 2:

Комментарии:

1. Изменяется ли положение столбца ID? Или это всегда второй столбец в фреймах данных?

2. Извините за поздний ответ. Но да. позиция столбца ID изменяется между фреймами данных.

Ответ №1:

Я могу придумать два варианта:

  1. переименуйте интересующие столбцы в одно уникальное имя. В зависимости от количества фреймов данных и значения столбца названия столбцов, это может быть слишком неуклюжим.
  2. Если столбцы, к которым вы хотите получить доступ, находятся в одной и той же позиции в dfs, вы можете получить доступ к имени n-го столбца в списке столбцов. Что-то вроде df.columns[1] .
  3. Вы можете найти столбец id:
 id_cols = [col for col in df.columns if 'id' in col]
  

Комментарии:

1. Здравствуйте, извините за крайне поздний ответ. (1) в pandas нет встроенного модуля, который мог бы достичь того, чего я хочу? (2) Столбец идентификаторов can не является постоянным и может изменяться без предварительного уведомления.

2. @Dense04 Я добавил опцию, которая находит столбец ID, предполагая, что столбец id содержит ‘id’ в своем названии. В зависимости от возможных значений имен столбцов вам может потребоваться доработать фильтр, но вы поняли идею.