Establecer el valor máximo (límite superior) en pandas DataFrame

Estoy tratando de establecer un valor máximo de una columna de dataframe de pandas. Por ejemplo:

my_dict = {'a':[10,12,15,17,19,20]} df = pd.DataFrame(my_dict) df['a'].set_max(15) 

produciría:

  a 0 10 1 12 2 15 3 15 4 15 5 15 

Pero no lo hace.

Hay un millón de soluciones para encontrar el valor máximo, pero nada para establecer el valor máximo … al menos eso puedo encontrar.

Podría recorrer la lista, pero sospecho que hay una forma más rápida de hacerlo con pandas. Mis listas serán significativamente más largas y, por lo tanto, esperaría que la iteración tomara relativamente más tiempo. Además, me gustaría cualquier solución para poder manejar NaN .

Supongo que puedes hacer:

 maxVal = 15 df['a'].where(df['a'] <= maxVal, maxVal) # where replace values with other when the # condition is not satisfied #0 10 #1 12 #2 15 #3 15 #4 15 #5 15 #Name: a, dtype: int64 

O:

 df['a'][df['a'] >= maxVal] = maxVal 

Puedes usar el clip .

Aplicar a todas las columnas del dataframe:

 df.clip(upper=15) 

De lo contrario, aplique a las columnas seleccionadas como se ve aquí :

 df.clip(upper=pd.Series({'a': 15}), axis=1) 

Desde v0.21 en adelante, puede usar DataFrame.clip_upper :

 df.clip_upper(15) a 0 10 1 12 2 15 3 15 4 15 5 15 

De forma similar, si solo desea establecer el límite inferior, use DataFrame.clip_lower . Estos métodos también están disponibles en los objetos de la Series .