Me gustaría encontrar los 5 valores más altos y más bajos en función de la suma de la última columna y las últimas filas de un conjunto de tablas que tiene más de 20,000 filas y 200 columnas. (Es un problema de múltiples etiquetas). La tabla original no tiene suma de columnas y filas. Agregué los valores de la suma por mí mismo). Vea el conjunto de datos de juguetes aquí:
import pandas as pd
data = {'index': ['0001 ','0002 ','0003 ','0004 ','0005 ','0006
','0007','0008','0009','0010','0011'],
'factor1': [0,1,0,1,0,0,1,0,0,0,1],
'factor2': [1,0,0,1,0,0,0,1,1,1,1],
'factor3': [1,1,1,1,0,0,0,1,1,0,1],
'factor4': [0,1,1,1,0,0,1,1,0,0,1],
'factor5': [1,1,1,1,0,0,0,1,1,1,1],
'factor6': [1,0,0,0,0,0,0,1,1,1,1],
'factor7': [0,1,1,1,1,0,1,1,0,0,1],
'factor8': [1,1,1,1,1,1,0,1,1,1,1],
'factor9': [1,0,0,0,0,0,0,0,0,0,0],
}
df = pd.DataFrame(data,columns=['index','factor1','factor2','factor3','factor4','factor5','factor6','factor7','factor8','factor9'])
count_row = df.count(axis=1)
df
Aquí está la tabla generada:
index factor1 factor2 factor3 factor4 factor5 factor6 factor7 factor8 factor9
0 0001 0 1 1 0 1 1 0 1 1
1 0002 1 0 1 1 1 0 1 1 0
2 0003 0 0 1 1 1 0 1 1 0
3 0004 1 1 1 1 1 0 1 1 0
4 0005 0 0 0 0 0 0 1 1 0
5 0006 0 0 0 0 0 0 0 1 0
6 0007 1 0 0 1 0 0 1 0 0
7 0008 0 1 1 1 1 1 1 1 0
8 0009 0 1 1 0 1 1 0 1 0
9 0010 0 1 0 0 1 1 0 1 0
10 0011 1 1 1 1 1 1 1 1 0
Usando este código, obtuve la suma de cada columna y cada fila
classSum=df.sum(axis=0)
df["sum"] =df.sum(axis=1)
df =df.append(classSum,ignore_index=True)
rowSum=df.sum(axis=1)
df.at[11,'index']='Nan'
df
Tabla con sumas en columnas y filas:
index factor1 factor2 factor3 factor4 factor5 factor6 factor7 factor8 factor9 sum
0 0001 0 1 1 0 1 1 0 1 1 6.0
1 0002 1 0 1 1 1 0 1 1 0 6.0
2 0003 0 0 1 1 1 0 1 1 0 5.0
3 0004 1 1 1 1 1 0 1 1 0 7.0
4 0005 0 0 0 0 0 0 1 1 0 2.0
5 0006 0 0 0 0 0 0 0 1 0 1.0
6 0007 1 0 0 1 0 0 1 0 0 3.0
7 0008 0 1 1 1 1 1 1 1 0 7.0
8 0009 0 1 1 0 1 1 0 1 0 5.0
9 0010 0 1 0 0 1 1 0 1 0 4.0
10 0011 1 1 1 1 1 1 1 1 0 8.0
11 Nan 4 6 7 6 8 5 7 10 1 NaN
Nota: la fila 11 es la fila de suma
Me gustaría tener un resultado como este:
Basado en filas: -La salida de los cinco valores principales se ve así:
factor 8 :10
factor 5 : 8
factor 3 : 7
factor 7 : 7
factor 4 : 6
Basado en columnas:
-Los 5 valores principales de salida se ven así:
0011 :8
0008 :7
0004 :7
0001 :6
0002 :6
Hay los mismos valores en la suma. Simplemente ignóralo.
Entonces, ¿cómo puedo hacerlo? ¡Gracias!
Comenzando con sus datos sin procesar, por lo que sin las columnas de suma, podemos usar DataFrame.sum
para obtener la suma por columna o fila ( axis=1
), luego encadenamos el resultado Series.nlargest
para obtener los 5 primeros.
df = df.set_index('index')
Las 5 columnas principales:
df.sum().nlargest(5)
factor8 10
factor5 8
factor3 7
factor7 7
factor2 6
dtype: int64
5 filas superiores:
df.sum(axis=1).nlargest(5)
index
0011 8
0004 7
0008 7
0001 6
0002 6
dtype: int64
Si realmente desea un diccionario, encadene las soluciones con to_dict
:
df.sum().nlargest(5).to_dict()
{'factor8': 10, 'factor5': 8, 'factor3': 7, 'factor7': 7, 'factor2': 6}
Para trazar su resultado, use DataFrame.plot.bar
:
df.sum().nlargest(5).plot.bar(figsize=(12,8))
Este artículo se recopila de Internet, indique la fuente cuando se vuelva a imprimir.
En caso de infracción, por favor [email protected] Eliminar
Déjame decir algunas palabras