首页 > 解决方案 > 在数据框的两列之间迭代

问题描述

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

 prob =  [[0,   0.00103,    0.00103],
         [0,    0.00267,    0.00311],
         [0,    0.00688,    0.01000],
         [0,    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]

'''

标签: pandasdataframemultiple-columns

解决方案


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

df_selection = pd.DataFrame({
        'A':list('abcdef'),
         'binS99':[0,1,2,0,2,1],
         'bin3HMax':[1,2,1,0,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,    0.00688,    0.01000],
         [0,    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

推荐阅读