фильтровать и группировать по массиву тегов в столбце данных

1

В следующем примере, как сохранить только строки с "a" в массиве, присутствующем в tags столбцов?

df = pd.DataFrame(columns=["val", "tags"], data=[[5,["a","b","c"]]])
df[3<df.val]            # this works
df["a" in df.tags]      # is there an equivalent for filtering on tags?
Теги:
pandas
dataframe

3 ответа

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

Я считаю, что использование наборов является интуитивным. Затем вы можете использовать >= качестве установленной оболочки

df[df.tags.apply(set) >= {'a'}]

   val       tags
0    5  [a, b, c]

Альтернативой Numpy будет

tags = df['tags']
n = len(tags)
out = np.zeros(n, np.bool8)
i = np.arange(n).repeat(tags.str.len())
np.logical_or.at(out, i, np.concatenate(tags) == 'a')

df[out]

Per @JonClements

Вы можете использовать set.issubset на map (очень умно)

df[df.tags.map({'a'}.issubset)]

   val       tags
0    5  [a, b, c]
  • 2
    Могли бы использовать: df.tags.map({'a'}.issubset) здесь
  • 0
    Хороший! Я добавил это.
Показать ещё 2 комментария
1

Использовать список:

df1 = df[["a" in x for x in df.tags]]
0

вы можете использовать apply с лямбда-функцией, которая проверяет, является ли 'a' аргументом лямбда:

df.tags.apply(lambda x: 'a' in x)

Результат:

0    True
Name: tags, dtype: bool

Это также можно использовать для индексации вашего фрейма данных:

df[df.tags.apply(lambda x: 'a' in x)]

Результат:

   val       tags
0    5  [a, b, c]

Ещё вопросы

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