Tengo un diccionario (pollution
) con una clave que deseo ignorar (chemical_start_time
) y todas las demás claves tienen valores que son marcos de datos de pandas.
Quiero obtener el valor máximo presente en cualquiera de los marcos de datos y el valor mínimo distinto de cero.
Creo que el siguiente código hace exactamente esto, pero estoy buscando la forma más eficiente o "pitónica" de hacerlo
import numpy as np
max_pols = []
min_pols = []
for key, df in pollution.items():
if key != 'chemical_start_time':
max_pols.append(max(df.max()))
min_pols.append(np.nanmin(df[df > 0].min()))
max_pol = max(max_pols)
min_pol = min(min_pols)
3 respuestas
Una posible solución para mejorar el rendimiento es usar numpy.ravel
para la matriz 1d de todos los valores de DataFrame y luego use np.min
(si es posible, faltan valores np.nanmin
) y np.max
:
df1 = pd.DataFrame({
'C':[7,8,9,4,2,3],
'D':[10,3,5,-7,10,0],
'E':[5,-3,6,9,2,4],
})
df2 = pd.DataFrame({
'A':[73,8,9,4,2,3],
'D':[1,3,52,-7,1,0],
'E':[53,-33,63,9,2,4],
})
pollution = {'a':df1, 'b':df2, 'chemical_start_time':pd.DataFrame([100])}
max_pols = []
min_pols = []
for key, df in pollution.items():
if key != 'chemical_start_time':
v = df.values.ravel()
max_pols.append(np.max(v))
min_pols.append(np.min(v[v > 0]))
max_pol = np.max(max_pols)
min_pol = np.min(min_pols)
print (max_pol)
73
print (min_pol)
1
También puedes usar:
max_pols.append(df.max().max())
min_pols.append(df[df > 0].min().min())
Combine todos los marcos de datos relevantes en uno:
frames = pd.concat([frame for key, frame in pollution.items() if key != 'chemical_start_time'])
Luego obtenga los valores max, min:
max_pol = frames.max().max()
min_pol = frames[frames > 0].min().min()
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.