繁体   English   中英

从两个单独的数据框创建一个熊猫数据框

[英]Creating A Pandas DataFrame From Two Separate DataFrames

在给定两个单独的Pan​​das 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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM