Python 从两个单独的数据帧创建数据帧

Python 从两个单独的数据帧创建数据帧,python,pandas,dataframe,auc,Python,Pandas,Dataframe,Auc,尝试编写一个函数来求解给定两个独立数据帧的曲线下的面积。数据帧的列已正确解包,如print语句所确认,但是,我无法从单独的帧中创建新的数据帧,也无法引用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

尝试编写一个函数来求解给定两个独立数据帧的曲线下的面积。数据帧的列已正确解包,如print语句所确认,但是,我无法从单独的帧中创建新的数据帧,也无法引用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,收到以下错误“float object not subscriptable”

numpy
具有数值积分方法,例如使用梯形规则计算

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

你重新驾驶这个真是太酷了。仅供参考:numpy(pandas的母软件包)具有更快、更精确、调试更好的数值积分函数。总之,答案不错。向上投票。@Anant Gupta谢谢你的回答!我已经能够计算ROC,并且位于单独的数据帧中。我的目标是计算AUC。不确定这是否是答案中的输入错误。另外,接收数据参数不能是组合数据帧解决方案的迭代器。为True。Numpy是强大的,我仍然感到惊讶。将探索更多关于trapz的信息