【问题标题】:Comparing different columns to get highest value, and return the rest as NaN比较不同的列以获得最高值,并将其余列返回为 NaN
【发布时间】:2021-01-26 11:46:29
【问题描述】:

在数据框中,我想创建 3 个标记为 A-hat、B-hat、C-hat 的新列,我想通过比较原始列 A、B 和 C 来返回最大值,否则返回为NaN。因此,在每一行中,新的 3 列应返回两个 NaN 和一个最大值。

输入df:

            A         B         C    
Date            
2020-01-05  3.57      5.29      6.23
2020-01-04  4.98      9.64      7.58
2020-01-03  3.79      5.25      6.26
2020-01-02  3.95      5.65      6.61
2020-01-01  -3.10     -7.20     -8.16

输出df:

            A         B         C         A-hat   B-hat   C-hat   
Date            
2020-01-05  3.57      5.29      6.23      NaN     NaN     6.23 
2020-01-04  4.98      9.64      7.58      NaN     9.64    NaN
2020-01-03  3.79      5.25      6.26      NaN     NaN     6.26
2020-01-02  3.95      5.65      6.61      NaN     NaN     6.61
2020-01-01  -3.10     -7.20     -8.16     -3.10   NaN     NaN

我怎样才能实现这个输出?

【问题讨论】:

    标签: python pandas dataframe


    【解决方案1】:

    您可以通过DataFrame.eq 中的DataFrame.max 比较最大值,如果不匹配掩码,可以通过DataFrame.where 设置缺失值:

    df = df.join(df.where(df.eq(df.max(axis=1), axis=0)).add_suffix('-hat'))
    print (df)
                   A     B     C  A-hat  B-hat  C-hat
    Date                                             
    2020-01-05  3.57  5.29  6.23    NaN    NaN   6.23
    2020-01-04  4.98  9.64  7.58    NaN   9.64    NaN
    2020-01-03  3.79  5.25  6.26    NaN    NaN   6.26
    2020-01-02  3.95  5.65  6.61    NaN    NaN   6.61
    2020-01-01 -3.10 -7.20 -8.16   -3.1    NaN    NaN
    

    【讨论】:

      猜你喜欢
      • 2021-10-10
      • 2013-11-07
      • 2020-01-22
      • 1970-01-01
      • 2013-08-08
      • 2020-12-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多