Así que tengo un marco de datos de pandas que se parece a esto.
name is_something
0 a 0
1 b 1
2 c 0
3 c 1
4 a 1
5 b 0
6 a 1
7 c 0
8 a 1
¿Hay alguna manera de usar groupby y fusionar para crear una nueva columna que proporcione la cantidad de veces que aparece un nombre con un valor is_something de 1 en todo el marco de datos? El marco de datos actualizado se vería así:
name is_something no_of_times_is_something_is_1
0 a 0 3
1 b 1 1
2 c 0 1
3 c 1 1
4 a 1 3
5 b 0 1
6 a 1 3
7 c 0 1
8 a 1 3
Sé que puede recorrer el marco de datos para hacer esto, pero estoy buscando una forma más eficiente porque el conjunto de datos con el que estoy trabajando es bastante grande. ¡Gracias por adelantado!
3 respuestas
Si solo hay valores 0
y 1
en la columna is_something
, solo use sum
con GroupBy.transform
para una nueva columna llena de valores agregados:
df['new'] = df.groupby('name')['is_something'].transform('sum')
print (df)
name is_something new
0 a 0 3
1 b 1 1
2 c 0 1
3 c 1 1
4 a 1 3
5 b 0 1
6 a 1 3
7 c 0 1
8 a 1 3
Si es posible, primero compare múltiples valores por 1
, convierta a entero y luego use transform
con sum
:
df['new'] = df['is_something'].eq(1).view('i1').groupby(df['name']).transform('sum')
Podrías hacer lo:
df['new'] = df.groupby('name')['is_something'].transform(lambda xs: xs.eq(1).sum())
print(df)
Salida
name is_something new
0 a 0 3
1 b 1 1
2 c 0 1
3 c 1 1
4 a 1 3
5 b 0 1
6 a 1 3
7 c 0 1
8 a 1 3
O simplemente lo mapeamos
df['New']=df.name.map(df.query('is_something ==1').groupby('name')['is_something'].sum())
df
name is_something New
0 a 0 3
1 b 1 1
2 c 0 1
3 c 1 1
4 a 1 3
5 b 0 1
6 a 1 3
7 c 0 1
8 a 1 3
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.