фрейм данных.loc с разделенной строкой

#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 ?