Как использовать str.startswith для нескольких столбцов? - PullRequest
0 голосов
/ 22 сентября 2018

У меня есть кадр данных, который выглядит следующим образом: мои данные

Я использовал это для фильтрации для пользователей, чьи идентификаторы начинаются с b, c, e, f, 5 и был в состоянииуспешно выполните это.

df[df.userA.str.startswith(('b','c','e','f','5'))]

Теперь я хочу сделать то же самое для столбцов userA и userB, и попытался выполнить это безуспешно:

df[[df.userA.str.startswith(('b','c','e','f','5'))] and [df.userB.str.startswith(('b','c','e','f','5'))]]

Есть идеи?

1 Ответ

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

Вы не можете использовать and, так как в Python это вернет первый операнд, который имеет истинность False (или, если в цепочке and такой операнд отсутствует, последний элемент).

Однако вы можете использовать операторы & и | в качестве логических и и или соответственно для применения нескольких условий.

Так что для вашего случая вы, вероятно, захотите использовать:

df[
    df.userA.str.startswith(('b','c','e','f','5')) <b>&</b>
    df.userB.str.startswith(('b','c','e','f','5'))
]

(это дает «строки» фрейма данных df, для которых и userA и userBначать с символа в ('b','c','e','f','5'));или

df[
    df.userA.str.startswith(('b','c','e','f','5')) <b>|</b>
    df.userB.str.startswith(('b','c','e','f','5'))
]

(это дает "строки" кадра данных df, для которых не менее userA или userB начинаются с символа в ('b','c','e','f','5'))

Для получения дополнительной информации см. Документацию по Логическое индексирование в pandas Документация .

...