如何在python中从字符索引中查找行号?

如何在python中从字符索引中查找行号?,python,pandas,indexing,shap,Python,Pandas,Indexing,Shap,我有一个基因数据集,其中一行的索引是基因的名称。我还希望找到任何给定基因的行号,这样我就可以在基因经过机器学习模型预测后单独观察它们——以shap解释基因的预测。我如何编码形状图目前需要一个行号来提取特定的基因 我的数据如下所示: Index Feature1 Feature2 ... FeatureN Gene1 1 0.2 10 Gene2 1 0.1 7 Gene3 0

我有一个基因数据集,其中一行的索引是基因的名称。我还希望找到任何给定基因的行号,这样我就可以在基因经过机器学习模型预测后单独观察它们——以shap解释基因的预测。我如何编码形状图目前需要一个行号来提取特定的基因

我的数据如下所示:

Index   Feature1  Feature2   ... FeatureN
Gene1     1           0.2          10
Gene2     1           0.1          7
Gene3     0           0.3          10
Index   index_mapping 
Gene1     0           
Gene2     1           
Gene3     2           
例如,如果我想拉出并查看
Gene3
的模型预测,我会这样做:

import shap
shap.initjs()

xgbr = xgboost.XGBRegressor()

def shap_plot(j):
    explainerModel = shap.TreeExplainer(xgbr)
    shap_values_Model = explainerModel.shap_values(X_train)
    p = shap.force_plot(explainerModel.expected_value, shap_values_Model[j], X_train.iloc[[j]],feature_names=df.columns)
    return(p)

shap_plot(3)
shap_plot(3)
对我来说是个问题,因为我实际上不知道我想要的基因是否在随机训练或测试数据的第3行


有没有办法从已知的基因索引中提取行号?或者可能重新编码我的形状图,以便它接受我的字符串索引?我有生物学背景,希望您能给予指导。

试试下面的方法。df是您的数据帧,结果将给出给定基因的行号(第一行结果为1等)

list(df.index).index('Gene3')+1

#result

3

有很多方法可以获取与索引值或列值关联的行号

例如,如果您的基因实际上位于名为
“Index”
的列中,您可以执行以下操作:

x_-train[x_-train[“Index”]=“gene3”]。Index+1
如果没有,您可以通过在数据帧上调用
reset\u index()
来实现这一点

另一个选择是在数据帧上创建一个从1-n开始的新列,例如

mapping = x_train.assign(index_number=range(x_train.shape[0]))["index_number"]
现在映射应如下所示:

Index   Feature1  Feature2   ... FeatureN
Gene1     1           0.2          10
Gene2     1           0.1          7
Gene3     0           0.3          10
Index   index_mapping 
Gene1     0           
Gene2     1           
Gene3     2           
调用
mapping[“Gene2”]
应该返回
1

除此之外,我注意到你使用了力图。我建议您阅读shap为什么用决策图取代它们

此外,每次调用函数时都要重建树解释程序。这是非常低效的,为什么不构建一次,然后多次查询它:

类图形绘图仪:
def_uuu初始(自我、模型、x_系列):
self.explainer\u model=shap.treeeexplainer(model)
self.shap\u values\u Model=self.explainer\u Model.shap\u values(x\u train)
self.gene_index_mapping=x_train.assign(index_value=range(x_train.shape[0]))[“index_value”]
def绘图(基因):
idx=自我。获取索引(基因)
shap_plot=shap.force_plot(…)#这里用idx替换j
返回形状图
def_get_索引(基因:str)->int:
#你在这里选择的方法。例如https://stackoverflow.com/a/64279019/1011724
#在本例中,我在_init__fn中构建了一个映射系列,因此您可以通过直接使用基因字符串进行索引来获得索引号:
返回self.gene\u index\u mapping.loc[gene]

这些基因是df的实际索引还是在一个名为“索引”的列中??它们是实际索引