Perhaps somebody will find this PyQGIS solution helpful:
from qgis.core import QgsProject
from statistics import mean
def mean_without_zeros(layer_name, list_of_fields, output_field):
layer = QgsProject.instance().mapLayersByName(layer_name)[0]
fields_names = layer.fields().names()
if not output_field in fields_names:
new_field = QgsField(output_field, QVariant.Double)
layer.dataProvider().addAttributes([new_field])
layer.updateFields()
layer.startEditing()
for feature in layer.getFeatures():
field_values = [feature.attribute(field.name()) for field in feature.fields() if field.name() in target_fields]
field_values_no_zeros = filter(lambda x: x > 0, field_values)
feature[output_field] = mean(list(field_values_no_zeros))
layer.updateFeature(feature)
layer.commitChanges()
return
mean_without_zeros('data', ["VALUE1", "VALUE2", "VALUE3"], "MEANVAL")
