Python 计算中的最小值

Python 计算中的最小值,python,pandas,csv,min,Python,Pandas,Csv,Min,我想将我之前编写的一段python代码转换为pandas,这样就可以直接在dataframe中完成,而不是与csv文件混为一谈 我想根据多个值(属性)计算设备的运行状况。 假设我有以下df: A B C 0 7 NaN 8 1 3 3 5 2 8 1 7 3 NaN 0 3 4 8 2 7 我想计算健康度如下: 请注意,def attributeHealth仍为旧格式,而不是 转换成熊猫因为那是我被卡住的地方 是使用csv库的代码 我尝试先将其简化为

我想将我之前编写的一段python代码转换为pandas,这样就可以直接在dataframe中完成,而不是与csv文件混为一谈

我想根据多个值(属性)计算设备的运行状况。 假设我有以下df:

   A   B  C
0  7 NaN  8
1  3   3  5
2  8   1  7
3  NaN 0  3
4  8   2  7
我想计算健康度如下:

请注意,
def attributeHealth
仍为旧格式,而不是 转换成熊猫因为那是我被卡住的地方 是使用csv库的代码

我尝试先将其简化为单个属性,但似乎无法以这种方式使用min()

inputDF['health'] = 1 - min(inputDF['A']* 2/100, 0.7)
提前谢谢

您可以使用:

inputDF['health'] = inputDF.apply(lambda row: 1 - min(row['A']* 2/100, 0.7),
                                  axis=1)
apply
对每一行执行给定的可调用(在本例中为lambda)并返回结果序列。

您可以使用,然后替换缺少的值
reindex

inputDF['health'] = ((1 - np.minimum(inputDF['A'].dropna() * 2/100, 0.7))
                            .reindex(inputDF.index, fill_value=1))
类似的解决方案:

inputDF['health'] = 1 - np.minimum(inputDF['A'].dropna() * 2/100, 0.7)
inputDF['health'] = inputDF['health'].fillna(1)                      

print (inputDF)
     A    B  C  health
0  7.0  NaN  8    0.86
1  3.0  3.0  5    0.94
2  8.0  1.0  7    0.84
3  NaN  0.0  3    1.00
4  8.0  2.0  7    0.84
总而言之:

def attributeHealth(col, weight, limit):
    #return Series (column)
    return ((1 - np.minimum(col.dropna() * weight/100, limit))
                               .reindex(col.index, fill_value=1))

a = attributeHealth(inputDF['A'], 10, 0.4) 
b = attributeHealth(inputDF['B'], 5, 0.5) 
c = attributeHealth(inputDF['C'], 2, 0.8) 

inputDF['Health'] = (a * b * c) * 100
print (inputDF)

     A    B  C  Health
0  7.0  NaN  8   50.40
1  3.0  3.0  5   53.55
2  8.0  1.0  7   49.02
3  NaN  0.0  3   94.00
4  8.0  2.0  7   46.44

在这个示例数据帧中,您希望输出什么?我将是原始的DF,带有一个额外的列“health”。感谢您提供了非常完整的答案,看到它的发展非常有趣!谢谢你的回答。我不熟悉应用功能,但它似乎非常强大,我一定会研究它!
def attributeHealth(col, weight, limit):
    #return Series (column)
    return ((1 - np.minimum(col.dropna() * weight/100, limit))
                               .reindex(col.index, fill_value=1))

a = attributeHealth(inputDF['A'], 10, 0.4) 
b = attributeHealth(inputDF['B'], 5, 0.5) 
c = attributeHealth(inputDF['C'], 2, 0.8) 

inputDF['Health'] = (a * b * c) * 100
print (inputDF)

     A    B  C  Health
0  7.0  NaN  8   50.40
1  3.0  3.0  5   53.55
2  8.0  1.0  7   49.02
3  NaN  0.0  3   94.00
4  8.0  2.0  7   46.44