更改列的名称 mean 否则 pandas 会与方法 mean 混淆。然后,回想一下,python 的 min 和 max 不是矢量化的,但您可以使用 pandas 计算它们:
import pandas as pd
import numpy as np
df = pd.DataFrame({'val': [46,9,30,31,68,33],
'mn': [35,35,35,33,37,37],
'sd': [6,5,1,3,3,7]})
df['normed'] = ((df.val - df.mn) / df.sd) - 10
df['minned'] = df[['val', 'normed']].min(axis=1)
df['final'] = df.minned.apply(lambda x: 0 if x < 0 else x)
# val mn sd normed minned final
# 0 46 35 6 - 8.166667 - 8.166667 0.000000
# 1 9 35 5 -15.200000 -15.200000 0.000000
# 2 30 35 1 -15.000000 -15.000000 0.000000
# 3 31 33 3 -10.666667 -10.666667 0.000000
# 4 68 37 3 0.333333 0.333333 0.333333
# 5 33 37 7 -10.571429 -10.571429 0.000000