[英]Add columns to pandas dataframe from two separate dataframes with condition
[英]Creating A Pandas DataFrame From Two Separate DataFrames
在给定两个单独的Pandas DataFrame的情况下,尝试编写函数来求解曲线下的面积。 正如print语句所确认的那样,DataFrames的列正在正确解压缩,但是,我无法从单独的帧中创建新的Dataframe或引用fpr数据帧的特定索引来进行计算。
def areaUnderCurve(tpr, fpr):
auc = 0.0
for fpr, tpr in zip(tpr['True Positive Rate'], fpr['False Positive Rate']):
auc += np.trapz(y=fpr['False Positive Rate'], x=tpr['True Positive Rate'])
return auc
calcAUC = areaUnderCurve(dataframe, dataframe)
print(calcAUC)
打印语句的示例输出:
0 1.0 0.94
1 1.0 0.8866666666666667
2 1.0 0.8133333333333334
3 1.0 0.7866666666666666
4 1.0 0.78
5 1.0 0.6533333333333333
6 1.0 0.6333333333333333
7 1.0 0.6266666666666667
8 1.0 0.6133333333333333
9 1.0 0.6
***用于尝试根据答案计算AUC的更新代码,收到以下错误“浮动对象不可下标”
numpy
具有用于数值积分的方法,例如np.trapz
,它使用梯形规则进行计算。
import numpy as np
np.trapz(y=fpr['False Positive Rate'], x=tpr['True Positive Rate'])
应该给你面积。
@杰伊·皮(Jay Py)
要回答第一个问题,您绝对可以从两个数据框创建一个数据框
data=pd.DataFrame(zip(tpr['True Positive Rate'],fpr['False Positive Rate']),columns=['TPR','FPR'])
为了计算ROC,您可以在此数据帧上使用以下逻辑
data['dFPR']=list(np.diff(data['FPR'].values)) + [0]
data['dTPR']=list(np.diff(data['TPR'].values)) + [0]
data['sum1']=data.apply(lambda x : x['TPR'] * x['dFPR'],axis=1)
data['sum2']=data.apply(lambda x : x['dTPR'] * x['dFPR'],axis=1)
ROC=sum(data['sum1']) + sum(data['sum2'])/2
随机值示例
tpr=pd.DataFrame(np.random.rand(100,2),columns=['Col1','True Positive Rate'])
fpr=pd.DataFrame(np.random.rand(100,2),columns=['Col2','False Positive Rate'])
data=pd.DataFrame(zip(tpr['True Positive Rate'],fpr['False Positive Rate']),columns=['TPR','FPR'])
data['dFPR']=list(np.diff(data['FPR'].values)) + [0]
data['dTPR']=list(np.diff(data['TPR'].values)) + [0]
data['sum1']=data.apply(lambda x : x['TPR'] * x['dFPR'],axis=1)
data['sum2']=data.apply(lambda x : x['dTPR'] * x['dFPR'],axis=1)
ROC=sum(data['sum1']) + sum(data['sum2'])/2
print(ROC)
0.773539521758
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.