pandas - 在数据框的两列之间迭代
问题描述
我正在尝试在数据框的两列(“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]
'''
解决方案
我相信您需要首先检查列中的最大值是否与列表中的最大值匹配,然后使用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
推荐阅读
- css - 仅使用 CSS 以绝对定位垂直堆叠元素
- javascript - PHP 和 JS 日历
- mysql - 为什么我在这个 kubernetes 示例中得到 CrashLoopBackOff?
- html - 为什么这个引导轮播不起作用?
- c++ - 使用 N-API 将数据流式传输到 Node.js C++ 插件
- aws-lambda - Localstack 是否支持 AWS Lambda 层
- python - 忽略 matplotlib 中交互模式 ion() 中的轴编辑 - 范围问题?
- go - 如何在 Go 语言中解组 Json 字符串以仅获取一个键的值
- security - npm 审计修复:1 个高严重性漏洞:任意文件覆盖
- java - 为什么 length_batch 在 ESPER CEP 查询中多次调用我的单行函数?