Python Pandas - Найти строки, где элемент находится в массиве строк - PullRequest
0 голосов
/ 17 февраля 2020

Я хочу найти все строки, в которых определенное значение присутствует в списке значений столбца.

Итак, представьте, что я настроил dataframe так:

|  placeID |                             users | 
------------------------------------------------
|    134986|   [U1030, U1017, U1123, U1044...] |
|    133986|   [U1034, U1011, U1133, U1044...] |
|    134886|   [U1031, U1015, U1133, U1044...] |
|    134976|   [U1130, U1016, U1133, U1044...] |

Как я могу получить все строки, где 'U1030' существует в столбце пользователей?

Или ... действительно ли проблема в том, что я не должен располагать свои данные таким образом, и вместо этого я должен взорвать этот столбец, чтобы иметь строку для каждого пользователя?

Как правильно подойти к этому?

Ответы [ 2 ]

1 голос
/ 17 февраля 2020

Если вы хотите проверить, существует ли значение внутри столбца, когда значение в столбце является списком, полезно использовать функцию map .

Реализуйте его, как показано ниже с помощью встроенной лямбда-функции список значений, хранящихся в столбце 'users', сопоставляется со значением u, а userID сравнивается с ним ...

На самом деле ответ довольно прост, если вы посмотрите на код ниже:


# user_filter filters the dataframe to all the rows where
# 'userID' is NOT in the 'users' column (the value of which
# is a list type)
user_filter = df['users'].map(lambda u: userID not in u)

# cuisine_filter filters the dataframe to only the rows
# where 'cuisine' exists in the 'cuisines' column (the value
# of which is a list type)
cuisine_filter = df['cuisines'].map(lambda c: cuisine in c)

# Display the result, filtering by the weight assigned
df[user_filter & cuisine_filter]

1 голос
/ 17 февраля 2020

То, как вы храните данные, выглядит хорошо для меня. Вам не нужно изменять формат хранения данных.

Попробуйте:

df1 = df[df['users'].str.contains("U1030")]

print(df1)

Это даст вам все строки, содержащие указанного пользователя в формате df.

...