【问题标题】:is_max = s == s.max() | How should I read this?is_max = s == s.max() |我应该怎么读这个?
【发布时间】:2016-10-12 11:22:54
【问题描述】:

在学习Pandas Style时,我得到了以下几点:

def highlight_max(s):
    '''
    highlight the maximum in a Series yellow.
    '''
    is_max = s == s.max()
    return ['background-color: yellow' if v else '' for v in is_max]

我应该如何阅读is_max = s == s.max()

【问题讨论】:

  • s == s.max() 是一个表达式,其结果赋值给is_max。在大多数对象上,== 产生一个布尔值(FalseTrue)。如果s 是一个系列,那么您将获得一个带有布尔值的系列。

标签: python python-2.7 pandas


【解决方案1】:

s == s.max() 将评估为布尔值(由于变量之间的==)。下一步是将该值存储在 is_max 中。

【讨论】:

    【解决方案2】:

    在 pandas 中,s 经常是 SeriesDataFrame 中的列)。

    因此,您将Series 中的所有值与maxSeries 值进行比较,并获得布尔掩码。输出在is_max。然后将样式'background-color: yellow' 仅设置为True 值的表格单元格 - 最大值在哪里。

    示例:

    s = pd.Series([1,2,3])
    print (s)
    0    1
    1    2
    2    3
    dtype: int64
    
    is_max = s == s.max()
    print (is_max)
    0    False
    1    False
    2     True
    dtype: bool
    

    【讨论】:

      【解决方案3】:

      代码

      is_max = s == s.max()

      被评估为

      is_max = (s == s.max())

      首先计算括号中的位,即TrueFalse。结果分配给is_max

      【讨论】:

      • 在 Python 中 == 相等测试可以重载。它不一定会产生布尔值。在 Pandas 中,Series 覆盖它并生成一个带有布尔值的新系列。所以Series([1, 2, 4, 8]) == Series([1, 2, 4, 8]).max() 产生Series([1, 2, 4, 8]) == 8 产生Series([False, False, False, True])
      • 还有很多语言中赋值不是运算符;我会说,将赋值作为运算符实际上是一个例外。
      【解决方案4】:

      is_max 等于 s 和 s_max 的比较

      【讨论】:

        【解决方案5】:

        根据文档,Evaluation order

        请注意,在评估作业时,右侧是 在左侧之前评估。

        这很合理,因为在将表达式分配给变量之前,您必须知道表达式的值。

        所以Python首先计算s.max(),然后检查计算的值是否等于s,得到一个布尔结果,然后将这个布尔值赋给一个名为is_max的变量。

        另见:Assignment statements

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2014-03-07
          • 2014-02-05
          • 1970-01-01
          • 1970-01-01
          • 2022-01-05
          • 2015-10-18
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多