【问题标题】:Selecting column with smallest value in pandas dataframe在熊猫数据框中选择最小值的列
【发布时间】:2021-12-28 15:51:12
【问题描述】:

我有一个具有这种结构的 pandas 数据框:

df_test

V       |  A    | B   |  C      |  D
-10     |  nan  | nan |  nan    |  nan  
-9.9    |  10   | 1   |  -2200  |  100
-9.8    |  11   | 2   |  -2211  |  1

我想添加一个新列minimum_difference,其中包含该特定行的绝对值最小的列名(忽略V),如下所示:

V       |  A    | B   |  C      |  D    | minimum_difference
-10     |  nan  | nan |  nan    |  nan  | nan
-9.9    |  10   | 1   |  -2200  |  100  | B
-9.8    |  11   | 2   |  -2211  |  1    | D

【问题讨论】:

    标签: python python-3.x pandas dataframe


    【解决方案1】:

    您可以使用df.drop 跳过V 列,使用df.abs 将数据框的值转换为其绝对等效值,并使用df.idxminaxis=1 来查找索引(这将是一列name) 的最小(绝对)值:

    df_test['minimum_difference'] = df_test.drop('V', axis=1).abs().idxmin(axis=1)
    

    输出:

    >>> df
          V     A    B       C      D minimum_difference
    0 -10.0   NaN  NaN     NaN    NaN                NaN
    1  -9.9  10.0  1.0 -2200.0  100.0                  B
    2  -9.8  11.0  2.0 -2211.0    1.0                  D
    

    【讨论】:

    • V 列有NaN 时,此解决方案将不起作用。
    • 但是 OP 指定忽略 V 列(忽略 V)...还是我误解了他们/你?
    • 啊,我现在看到了。不用担心。无论如何,我想给出一个更通用的解决方案。
    【解决方案2】:

    你可以检查一个row是否包含NaN,然后放入NaN,否则计算该行的min并放入索引。

    In [101]: import numpy as np
    
    In [102]: df['minimum_difference'] = np.where(df.isna().any(1), np.nan, df.abs().idxmin(1))
    
    In [103]: df
    Out[103]: 
          V     A    B       C      D minimum_difference
    0 -10.0   NaN  NaN     NaN    NaN                NaN
    1  -9.9  10.0  1.0 -2200.0  100.0                  B
    2  -9.8  11.0  2.0 -2211.0    1.0                  D
    

    【讨论】:

      【解决方案3】:

      在这里,我分享了 Mayank 的 sn-p,几乎没有更新。

      In [84]: df['minimum_difference'] = df.ix[:, 1:].abs().idxmin(1)
      
      In [85]: df
      Out[85]: 
            V     A    B       C      D minimum_difference
      0 -10.0   NaN  NaN     NaN    NaN                  NaN
      1  -9.9  10.0  1.0 -2200.0  100.0                  B
      2  -9.8  11.0  2.0 -2211.0  200.0                  B
      

      【讨论】:

      • 什么是ix? pandas 文档中的那个在哪里?
      • @sammywemmy 它已在 pandas 1.0.0 中删除。 :(
      猜你喜欢
      • 2019-01-24
      • 1970-01-01
      • 2021-11-30
      • 2021-02-08
      • 2017-07-25
      • 2015-08-15
      • 1970-01-01
      • 2016-12-17
      相关资源
      最近更新 更多