【问题标题】:largest element all lists in Panda Series熊猫系列所有列表中最大的元素
【发布时间】:2018-07-11 06:34:13
【问题描述】:

我有一个熊猫系列说

import pandas as pd
a = pd.Series([
    [1, 2, 3, 4, 5],
    [6, 7, 8, 3, 334],
    [333, 4, 5, 3, 4]
])

我想在所有列表中找到最大的元素,即 334,有什么简单的方法吗?

【问题讨论】:

    标签: python pandas series


    【解决方案1】:

    这是一种方式:

    max(max(i) for i in a)
    

    功能变体:

    max(map(max, a))
    

    只计算一个max的替代方法:

    from toolz import concat
    
    max(concat(a))
    

    为了好玩,下面是一些基准测试。惰性函数 concat 和优化的 map / 列表解析做得最好,然后是 numpy 函数,pandas 方法通常更差,聪明的 sum 应用程序最后。

    import numpy as np
    from toolz import concat
    import pandas as pd
    
    a = pd.Series([list(np.random.randint(0, 10, 100)) for i in range(1000)])
    
    # times in ms
    5.92  max(concat(a))
    6.29  max(map(max, a))
    6.67  max(max(i) for i in a)
    17.4  max(x for l in a for x in l)
    19.2  np.max(a.tolist())
    20.4  np.concatenate(a.values).max()
    64.6  pd.DataFrame(a.values.tolist()).max().max()
    373   np.max(a.apply(pd.Series).values)
    672   max(sum(a,[]))
    696   max(a.sum())
    

    【讨论】:

    • 感谢您的时间 :-)
    • @Wen,没问题,这里没有什么太令人惊讶的地方,但看到什么效果很好总是很有趣。也许我会更多地使用concat :)。
    • 是的,我也会考虑 :-)
    【解决方案2】:

    到数据框

    pd.DataFrame(a.values.tolist()).max().max()
    Out[200]: 334
    

    或numpy.concatenate

    np.concatenate(a.values).max()
    Out[201]: 334
    

    或者

    max(sum(a,[]))
    Out[205]: 334
    

    【讨论】:

      【解决方案3】:

      选项 1
      仅当元素实际上是 list 时才有效。这是因为sum 连接列表。这也可能非常缓慢。

      max(a.sum())
      
      334
      

      选项 2
      max 的最小两层应用

      max(map(max, a))
      
      334
      

      选项 3
      仅当所有列表长度相同时才有效

      np.max(a.tolist())
      
      334
      

      选项 4
      max 在未绕线发电机上的一种应用

      max(x for l in a for x in l)
      
      334
      

      【讨论】:

        【解决方案4】:

        使用 np.max 的另一个答案:

        import numpy as np
        np.max(a.apply(pd.Series).values)
        Out[175]: 334
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2021-10-10
          • 2018-02-09
          • 2022-10-16
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多