【问题标题】:Get Row and Column Names (argmax) for max entry in pandas dataframe获取 pandas 数据框中最大条目的行和列名称(argmax)
【发布时间】:2015-01-31 14:12:52
【问题描述】:

df.idxmax() 沿轴(行或列)返回最大值,但我希望 arg_max(df) 覆盖整个数据帧,它返回一个元组(行、列)。

我想到的用例是特征选择,其中我有一个相关矩阵并希望“递归”删除相关性最高的特征。我预处理相关矩阵以考虑其绝对值并将对角元素设置为-1。然后我建议使用rec_drop,它递归地从具有最高相关性的特征对中删除一个(取决于截止值:max_allowed_correlation),并返回最终的特征列表。例如:

S = S.abs()
np.fill_diagonal(S.values,-1) # so that max can't be on the diagonal now
S = rec_drop(S,max_allowed_correlation=0.95)

def rec_drop(S, max_allowed_correlation=0.99):
    max_corr = S.max().max()
    if max_corr<max_allowed_correlation: # base case for recursion
         return S.columns.tolist() 
    row,col = arg_max(S)  # row and col are distinct features - max can't be on the diagonal
    S = S.drop(row).drop(row,axis=1) # removing one of the features from S
    return rec_drop(S, max_allowed_correlation)

【问题讨论】:

    标签: python numpy pandas feature-selection


    【解决方案1】:

    假设您的所有 pandas 表都是数字的,您可以做的就是转换为它的 numpy 解释并从中提取最大位置。但是,numpy 的 argmax 可以处理扁平数据,因此您需要解决:

    # Synthetic data
    >>> table = pd.DataFrame(np.random.rand(5,3))
    >>> table
              0         1         2
    0  0.367720  0.235935  0.278112
    1  0.645146  0.187421  0.324257
    2  0.644926  0.861077  0.460296
    3  0.035064  0.369187  0.165278
    4  0.270208  0.782411  0.690871
    
    [5 rows x 3 columns
    

    将表格转换为numpy数据并计算argmax:

    >>> data = table.as_matrix()
    >>> amax = data.argmax() # 7 in this case
    >>> row, col = (amax//data.shape[1], amax%data.shape[1])
    >>> row, col
    (2, 1)
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2022-12-17
      • 2021-10-23
      • 1970-01-01
      • 2021-11-04
      • 2019-12-23
      • 2022-11-29
      • 2021-10-24
      • 2016-02-04
      相关资源
      最近更新 更多