Панды: фильтровать строки с элементами списка, начинающимися со строки? - PullRequest
0 голосов
/ 21 сентября 2018

Blockquote

У меня есть следующий фрейм данных.

d = pd.DataFrame({'a': [['foo', 'bar'], ['bar'], ['fah', 'baz']})

Я хотел бы вернуть только строки со значениями начала f в них - то есть первую и третью строки.

Вот что я пробовал:

 d[d.a.is_in('f')]

Ответы [ 2 ]

0 голосов
/ 21 сентября 2018

Решение с использованием .apply(), итерация по отдельным элементам списка, проверка с помощью .startswith() и оценка длины результирующего списка:

import pandas as pd

df = pd.DataFrame({'a': [['foo', 'bar'], ['bar'], ['fah', 'baz']]})
df = df[df.a.apply(lambda x: len([el for el in x if el.startswith('f')]) > 0)]
print(df)

, что приводит к:

            a
0  [foo, bar]
2  [fah, baz]
0 голосов
/ 21 сентября 2018

Используйте any в списках с генератором:

d = d[[any(y.startswith('f') for y in x) for x in d['a']]]
print (d)
            a
0  [foo, bar]
2  [fah, baz]

Detail : (преобразовать в список только для образца)

print ([list(y.startswith('f') for y in x) for x in d['a']])
[[True, False], [False], [True, False]]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...