Tengo un marco de datos que se tomó de una encuesta. Tengo dos columnas: el número de identificación del encuestado y la base de datos con la que trabajó.
Respondent DatabaseWorkedWith
0 4 MySQL
1 4 SQLite
2 9 DynamoDB
3 9 PostgreSQL
4 9 SQLite
... ... ...
31370 25137 MySQL
31371 25138 PostgreSQL
31372 25141 Microsoft SQL Server
31373 25141 Redis
31374 25142 PostgreSQL
31375 rows × 2 columns
La pregunta está en el título. Me gustaría contar el número de encuestados que solo tienen MySQL en la segunda columna. No estoy seguro de si debo usar un método único, grupal u otro.
¡Gracias!
Cuando dice "sólo", ¿quiere decir que las filas con el mismo número de encuestado corresponden al mismo encuestado? Entonces desea encontrar filas que tengan MySQL, de modo que haya¿No hay tampoco otras filas con el mismo demandado? Sí, parece que quieres considerar las filas en grupos según el encuestado, que es lo que hace groupby. ¿Qué pasó cuando intentaste usar .groupby y miraste el resultado? ¿Pareció algo que te acercó a una solución?
- Karl Knechtel
26/03/2021 a las 23:55
¡Hola @KarlKnechtel! ¡Sí, estás en lo correcto! Quiero recuperar la cantidad de encuestados que solo tienen MySQL, lo que significa que el encuestado número 1 no tendrá una fila con MySQL y una fila con MongoDB. Usando groupby y contando puedon ver el número de idiomas de cada encuestado.
-pedrolorandi
27 de marzo de 2021 a las 0:01
Está bien. Para los encuestados que le interesan, los que solo usaron MySQL, ¿cuántos idiomas usaron? ¿Sabes cómo filtrar el resultado de groupby para obtener esos encuestados? Luego puedes filtrarlos nuevamente según quién respondió realmente con MySQL, ¿no? Otra cosa que podrías intentar hacer es combinar todos los nombres de las bases de datos que usaron y buscar combinaciones que solo contengan MySQL.
- Karl Knechtel
27 de marzo de 2021 a las 0:06
Quizás también quieras consultar la documentación.
- Karl Knechtel
27 de marzo de 2021 a las 0:07
------------------------------------
Se me ocurrió una solución que tal vez no sea la más práctica, pero funcionó.
Primero, creé un marco de datos que suma la columna 'DatabaseWorkedWith':
resp_sum = df.groupby('Respondent').sum()
Respondent DatabaseWorkedWith
4 MySQLSQLite
9 DynamoDBPostgreSQLSQLite
13 CouchbaseDynamoDBFirebaseMySQL
16 MongoDBMicrosoft SQL ServerMySQL
17 MongoDBPostgreSQL
... ...
25136 Microsoft SQL Server
25137 MySQL
25138 PostgreSQL
25141 Microsoft SQL ServerRedis
25142 PostgreSQL
10945 rows × 1 column
Usando el nuevo marco de datos, conté por la columna 'DatabaseWorkedWith' donde el valor era 'MySQL'.
resp_sum[resp_sum['DatabaseWorkedWith']=='MySQL'].count()
DatabaseWorkedWith 474
dtype: int64
Si pudieran presentarUna solución más elegante, ¡te lo agradecería!
¡Gracias!
2
Esto corre el riesgo de encontrar a alguien que afirme haber trabajado, digamos, tanto con "MyS" como. y "QL". Estoy bastante seguro de que hay una manera de obtener una lista de los valores del grupo en lugar de concatenar las cadenas, pero en realidad no uso Pandas con regularidad; Simplemente soy bueno (creo) para decirle a la gente cómo resolver problemas y usar motores de búsqueda y documentación.
- Karl Knechtel
27 de marzo de 2021 a las 0:21
¡De hecho, existe este riesgo, @KarlKnechtel! ¡Intentaré encontrar una solución mejor y la publicaré! ¡Gracias por tu apoyo!
-pedrolorandi
27 de marzo de 2021 a las 0:25
------------------------------------
Tengo una solución que puede hacer el trabajo.
Puede eliminar todas las filas con valores duplicados en la columna 'Encuestado' y luego filtrar la base de datosWorkedWith con MySQL.
Aquí está el código
Compartir
mejorar esta respuesta
Seguir
respondido el
13 de abril de 2022 a las 1:44
Yiran Zhu
Yiran Zhu
1