Quiero encontrar todas las filas donde hay un cierto valor dentro del valor de lista de la columna.

Así que imagina que tengo una dataframe configurada así:

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

¿Cómo puedo obtener todas las filas donde 'U1030' existe en la columna de usuarios?

O ... ¿el problema real es que no debería tener mis datos ordenados de esta manera, y debería explotar esa columna para tener una fila para cada usuario?

¿Cuál es la forma correcta de abordar esto?

0
Paul Hazen 17 feb. 2020 a las 10:39

2 respuestas

Cuando desee verificar si existe un valor dentro de la columna cuando el valor en la columna es una lista, es útil usar mapa función.

Implementándolo como a continuación, con una función lambda en línea, la lista de valores almacenados en la columna 'usuarios' se asigna al valor u, y el ID de usuario se compara con él ...

Realmente la respuesta es bastante sencilla cuando miras el código a continuación:


# 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
Paul Hazen 17 feb. 2020 a las 09:50

La forma en que ha almacenado los datos me parece bien. No necesita cambiar el formato de almacenamiento de datos.

Pruebe esto :

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

print(df1)

Esto le dará todas las filas que contienen el usuario especificado en formato df.

1
Prashant Kumar 17 feb. 2020 a las 07:51