在数据框的两列之间进行迭代

问题描述

我正在尝试在数据帧的两列(“ binS99”,“ bin3HMax”)之间进行迭代。这些列的值从0到4。然后,我想在同一数据帧(“ df_selection”)中创建一个新列(“概率”),并从矩阵“ Prob”中获取值。以下代码进入循环。关于如何解决的任何想法?谢谢

 prob =  [[0,0.00103,0.00103],[0,0.00267,0.00311],0.00688,0.01000],0.01777,0.03218]] 

for index,row,in df_selection.iterrows():
    a = int(df_selection.loc[index,"binS99"]) #int(str(row["binS99"]))
    b = int(df_selection.loc[index,"bin3HMax"]) #int(str(row["bin3HMax"]))
   
    df_selection.loc[index,"Probability"]= prob[a][b]

'''

解决方法

我相信您需要首先检查列中的最大值是否与列表中的最大数目匹配,然后使用numpy indexing

df_selection = pd.DataFrame({
        'A':list('abcdef'),'binS99':[0,1,2,1],'bin3HMax':[1,0],})
print (df_selection)
   A  binS99  bin3HMax
0  a       0         1
1  b       1         2
2  c       2         1
3  d       0         0
4  e       2         1
5  f       1         0

prob =  [[0,0.00103,0.00103],[0,0.00267,0.00311],0.00688,0.01000],0.01777,0.03218]] 

arr_prob = np.array(prob)
print (arr_prob)
[[0.      0.00103 0.00103]
 [0.      0.00267 0.00311]
 [0.      0.00688 0.01   ]
 [0.      0.01777 0.03218]]

a = df_selection['binS99'].to_numpy()
b = df_selection['bin3HMax'].to_numpy()

df_selection['Probability'] = arr_prob[a,b]
print (df_selection)
   A  binS99  bin3HMax  Probability
0  a       0         1      0.00103
1  b       1         2      0.00311
2  c       2         1      0.00688
3  d       0         0      0.00000
4  e       2         1      0.00688
5  f       1         0      0.00000

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...