Tengo este marco de datos:
df = pd.DataFrame({ "cluster": ["A", "A", "A", "A", "A", "C", "C", "C", "C"],
"col1": ["0", "0", "1", "1", "0", "1", "0", "1", "0"],
"col2": ["1", "1", "1", "1", "0", "1", "1", "1", "0"] })
y no puedo encontrar la mejor manera de obtener un resultado de marco de datos con este formato
columna | grupo | promedio |
---|---|---|
col1 | UN | 0.4 |
col1 | C | 0.5 |
col2 | UN | 0.8 |
col2 | C | 0.75 |
Solución del problema
Parece que una combinación de melt
y groupby
+ mean
haría el truco. Tenga en cuenta que los valores de "col" son cadenas en su entrada, por lo que también tenemos que convertirlos en números enteros primero antes de calcular la media:
out = (df.melt(['cluster'], var_name='col')
.assign(value=lambda x: x['value'].astype(int))
.groupby(['col', 'cluster'], as_index=False).mean())
Producción:
col cluster value
0 col1 A 0.40
1 col1 C 0.50
2 col2 A 0.80
3 col2 C 0.75
No hay comentarios:
Publicar un comentario