Python 计算中的最小值
我想将我之前编写的一段python代码转换为pandas,这样就可以直接在dataframe中完成,而不是与csv文件混为一谈 我想根据多个值(属性)计算设备的运行状况。 假设我有以下df: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库的代码 我尝试先将其简化为
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