【问题标题】:Pandas: how to find row and column for values in a range?Pandas:如何查找范围内的值的行和列?
【发布时间】:2018-10-26 18:39:58
【问题描述】:

我有一个 Pandas DataFrame,它是通过跨变量执行多重关联生成的。

corr = df.apply(lambda s: df.corrwith(s))
print('\n', 'Correlations')
print(corr.to_string())

输出如下:

 Correlations
        A         B           C          D          E
A   1.000000   -0.901104    0.662530  -0.772657   0.532606
B  -0.901104    1.000000   -0.380257   0.946223  -0.830466
C   0.662530   -0.380257    1.000000  -0.227531  -0.102506
D  -0.772657    0.946223   -0.227531   1.000000  -0.888768
E   0.532606   -0.830466   -0.102506  -0.888768   1.000000

但是,这是关联表的一个小样本,可能超过 300 行 x 300 列。我正在尝试找到一种方法来识别特定值范围内的相关坐标。

例如,+0.25 和 -0.25 之间的相关性。我想要的输出是:

E x C = -0.102506
D x C = -0.227531

在搜索过程中,我发现了一些无法以连贯方式组合在一起的 pandas 函数: pandas iloc, loc, pandas between

您建议我如何完成此过滤?

【问题讨论】:

  • 我不确定您从研究中发现的结果中缺少什么。这让我觉得问题比你说的要多
  • 例如,了解上面的 pandas 函数是否足以用于此目的会很有帮助,或者是否有任何关于如何使用它们来解决此问题的指示,我还没有找到任何远

标签: python pandas dataframe


【解决方案1】:

使用掩码 + DataFrame.where。我们将使用np.triu 去除重复项,因为相关矩阵是对称的。

import numpy as np

corr.where(np.triu((corr.values <= 0.25) & (corr.values >= -0.25))).stack()

C  D   -0.227531
   E   -0.102506
dtype: float64

【讨论】:

  • @pepe 是的,遗憾的是没有DataFrame.between 方法,所以你只能同时做这两个。我想你可以使用np.logical_and,但对于 2 个条件,它并没有那么干净。我们得到一个与DataFrame 形状相同的真/假值数组。然后使用DataFrame.where,它只留下True 单元格,并用NaN 填充False 单元格。 .stack 完成后只留下非空单元格。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2020-07-29
  • 2015-10-30
  • 1970-01-01
  • 1970-01-01
  • 2019-02-11
  • 1970-01-01
相关资源
最近更新 更多