Tengo un marco de datos (eventos) que tiene varias columnas: id, ..., clic, ... La columna "clic" es una variable booleana que tiene el valor 'Verdadero' o 'Falso'. Uso el código en Python a continuación para contar el número de 'Verdadero' para cada "id" individual:
click_yes = events.groupby("id")["click"].count(True).reset_index()
Salió un error: TypeError: count() takes 1 positional argument but 2 were given
Salida de ejemplo:
Si el caso es como este marco de datos original:
id click
0 0 True
1 1 False
2 1 True
3 1 True
4 2 True
5 2 False
6 3 False
Quiero que el resultado sea un nuevo marco de datos, como este (cuente con el número de 'Verdadero'):
id click_count
0 0 1
1 1 2
2 2 1
3 3 0
¿Cómo modificar mi siguiente código (no funciona) o escribir un nuevo código para que mi expectativa suceda?
Click_yes = events.groupby ("id") ["click"]. count (True) .reset_index () ¡Gracias!
¿Cuál es la forma correcta de hacer esto?
¡Muchas gracias!
4 respuestas
En su lugar, puede usar sum()
, ya que el valor de True
es 1 y False
es 0.
Gracias por todas las respuestas! ¡Lo aprecio!
Si el caso es así:
Marco de datos original:
id click
0 0 True
1 1 False
2 1 True
3 1 True
4 2 True
5 2 False
6 3 False
Quiero que el resultado sea un nuevo marco de datos, como este (cuente con el número de 'Verdadero'):
id click_count
0 0 1
1 1 2
2 2 1
3 3 0
¿Cómo modificar mi siguiente código (no funciona) o escribir un nuevo código para que mi expectativa suceda?
click_yes = events.groupby("id")["click"].count(True).reset_index()
Gracias !!!
Supongo que está utilizando marcos de datos de panda, por lo que he agregado un enfoque rápido. Por cierto: en realidad, tu uso de count
es incorrecto. Solo puede devolver la longitud de algo (por ejemplo, una lista) pero no se puede usar como filtro.
Como ha agregado el resultado deseado, ahora entiendo lo que intenta lograr. He agregado un nuevo fragmento. Nuevamente filtro por valores 'verdaderos'. En la siguiente línea empiezo a sumar líneas dependiendo del contenido de su columna.
import pandas as pd
# Create your list
# initialize list of lists
data = [ [0, True], [1, False], [1, True], [5, True], [2, True],
[2, False], [3, False], [2, True], [4, False], [1, True],
[6, True], [2, True]]
# Create the pandas DataFrame
df = pd.DataFrame(data, columns=['id', 'click'])
df = df.sort_values(by=['id'])
#------------------------------------------------------------------------------#
# Filter for key value true
df = df[df.click == True]
# Merge lines depending of it's column content
filtered = df.groupby('id').agg({ 'click':'sum'}).reset_index()
# If we need it, rename the column
filtered = filtered.rename(columns={"click": "click_count"})
# Print out the list
print(filtered)
Si esta es su entrada (marco de datos):
id click
0 0 True
1 1 False
2 1 True
9 1 True
4 2 True
5 2 False
7 2 True
11 2 True
6 3 False
8 4 False
3 5 True
10 6 True
Con el fragmento obtendrás el siguiente resultado:
id click_count
0 0 1.0
1 1 2.0
2 2 3.0
3 5 1.0
4 6 1.0
>>> sum(map(bool,[True, True, False, False, False, True]))
3
La respuesta es 3, porque True == 1
O solo Suma:
>>> sum([True, True, False, False, False, True])
3
O usando count ():
lst = [True, True, False, False, False, True]
print(count(lst)
Preguntas relacionadas
Nuevas preguntas
python
Python es un lenguaje de programación multipropósito, de tipificación dinámica y de múltiples paradigmas. Está diseñado para ser rápido de aprender, comprender y usar, y hacer cumplir una sintaxis limpia y uniforme. Tenga en cuenta que Python 2 está oficialmente fuera de soporte a partir del 01-01-2020. Aún así, para preguntas de Python específicas de la versión, agregue la etiqueta [python-2.7] o [python-3.x]. Cuando utilice una variante de Python (por ejemplo, Jython, PyPy) o una biblioteca (por ejemplo, Pandas y NumPy), inclúyala en las etiquetas.