#python #python-3.x #pandas #dataframe
#python #python-3.x #панды #dataframe
Вопрос:
Как я могу сопоставить значение int, преобразованное в str, в столбце с использованием split??
personid = '23'
cond = (personid == x for x in df['wait'].str.split(","))
rows = df.loc[cond, :]
df['wait']
содержит строку типа «2,13,23»
В настоящее время он возвращает Empty DataFrame
Комментарии:
1. Пожалуйста, опубликуйте пример входных данных с ожидаемым результатом.
Ответ №1:
Если добавить expand=True
, чтобы Series.str.split
получить DataFrame с новыми столбцами, заполненными разделенными значениями, затем сравните по ==
by DataFrame.eq
и проверьте, есть ли хотя бы один True
в строке by DataFrame.any
. последний фильтр по boolean indexing
:
#personid is string - `''`
personid = '23'
cond = df['wait'].str.split(",", expand=True).eq(personid).any(axis=1)
rows = df[cond]
Если хотите сопоставить целые значения в personid
:
#personid is integer
personid = 23
cond = df['wait'].str.split(",", expand=True).astype(float).eq(personid).any(axis=1)
rows = df[cond]
Ваше решение должно быть изменено:
cond = [any(y == personid for y in x) for x in df['wait'].str.split(",")]
Комментарии:
1. Это работает. Не могли бы вы объяснить синтаксис? Разве совпадающие целые числа не будут использоваться
int
вместоfloat
?