python - 如何获得以布尔为条件的行和列索引,并将所述索引应用于另一个数据框?
问题描述
我有 2 个数据框,res_params
并且res_tStats
. 两个数据框中的列和索引是相同的。只有每一行和每一列中的值(如果你愿意,相当于 Excel 中的“单元格”)不同。
我需要从数据框中获取行和列的索引,res_tStats
然后abs(res_tStats) > 1.96
将格式应用于数据框中的相同索引和行。res_params
我做了什么
# res_tStats is a NxM dataframe with shape (6, 4)
# res_params is a NXM dataframe with shape (6, 4)
idx_required = np.where(abs(res_tStats) > 1.96)
print(idx_required)
# output: array([0, 0, 0, 5, 5, 5, 5]), array([0, 2, 3, 0, 1, 2, 3]))
到目前为止,一切都很好。它给了我正确的索引位置 where abs(res_tStats) > 1.96
。以下值实际上很重要:
第 0 行,第 0
行 第 0 行,第 2
行 第 0 行,第 3
行 第 5 行,第 0
行 第 5 行,第 1
行 第 5 行,第 2
行 第 5 行,第 3 行
现在,当我将这些索引位置应用于 时res_params
,我期望在完全相同的索引位置获得值。但是,我不太明白。
运行:res_params.iloc[idx_required]
返回形状为 (7, 7) 的 df。
idx_required
我通过申请来仔细检查res_tStats
,希望只得到 > 1.96 的值,但是这并没有发生。
res_tStats.iloc[idx_required]
还返回一个形状为 (7, 7) 的 df,其中的一些值低于 1.96
解决方案
问题是它idx_required
是一个带有索引和列的元组, .iloc
如果你传递一个元组,它会以交叉积的方式选择它们。
一个简单的解决方法是:
res_params[np.abs(res_tStats)>1.96]
这将返回一个数据框,其中包含条件不成立的res_params
地点np.abs(res_tStats)>1.96
和地点的值。NaN
另一种方法是获取元素列表:
res_params.to_numpy()[idx_required]
这样,您将获得元素列表,没有相应的索引或列。
推荐阅读
- css - 如何使孙子元素具有粘性?
- javascript - 从 javascript 调用 javafx
- python - 数组乘法与整数
- python - 如何使用文本获取href的值
- amazon-web-services - Lambda 中的 aws-sdk 如何自动获取凭证?
- php - vue 组件在 laravel 刀片中不显示数据
- sql - 如果使用 SQL 存在数据,如何将“计划”替换为“实际”
- amazon-web-services - 如何降低 AWS 课程平台上的数据传输成本?
- c# - 在 C# 中传递值列表
- mysql-workbench - 为什么mysql工作台只允许将一个自包含文件导入db中?