фильтровать и группировать по массиву тегов в столбце данных - PullRequest
0 голосов
/ 11 октября 2018

В следующем примере, как сохранить только строки с "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?

Ответы [ 3 ]

0 голосов
/ 11 октября 2018

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

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]
0 голосов
/ 11 октября 2018

вы можете использовать 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]
0 голосов
/ 11 октября 2018

Использование списка понимания:

df1 = df[["a" in x for x in df.tags]]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...