【问题标题】:Replacing list comprehensions with pandas and numpy Python用 pandas 和 numpy Python 替换列表推导
【发布时间】:2021-05-02 22:20:36
【问题描述】:

下面的函数使用切片来一次获取 2 个索引之间的最大值。所以它在0 and 1010 and 12 之间得到最大值。该函数源自对这篇帖子post 的回答。有没有办法可以像pd.Series() 这样的熊猫函数形式替换列表理解。或者如果可能的话,将其作为一个 numpy 函数。

list_ = np.array([9887.89, 9902.99, 9902.99, 9910.23, 9920.79, 9911.34, 9920.01, 9927.51, 9932.3, 9932.33, 9928.87, 9929.22, 9929.22, 9935.24, 9935.24, 9935.26, 9935.26, 9935.68, 9935.68, 9940.5])
indexes = np.array([0,10,12,14])
chunks = np.split(list_, indexes[1:-1])
MAX=([c.max() for c in chunks])

【问题讨论】:

  • 为什么要这样做?是出于性能原因还是需要 numpy 数组形式的结果?
  • df.iloc[0:10].max() 只需将 0/10 替换为您想要的

标签: python pandas list numpy slice


【解决方案1】:

我会推荐这个:

MAX = np.maximum.reduceat(list_,indexes[:-1])

输出:

array([9932.33, 9929.22, 9940.5 ])

另一种不会提高你的表现的方式,只是在你的答案中替代列表理解(事实上,甚至可能会稍微慢一点):

max = np.vectorize(np.max)
MAX = max(chunks)

【讨论】:

  • 有没有办法也可以获得9932.33, 9929.22, 9940.5 的索引。我试图对它实施argmax,但它没有锻炼
  • @tonyselcuk 完全不同的问题,但这篇文章是否回答了您的问题stackoverflow.com/a/41835843/4975981
  • @tonyselcuk 很高兴它解决了。请随时接受答案以关闭问题。谢谢。
  • 抱歉耽搁了现在才做。
猜你喜欢
  • 1970-01-01
  • 2013-10-20
  • 1970-01-01
  • 2016-04-07
  • 1970-01-01
  • 2015-07-16
  • 2019-07-13
  • 2021-09-22
  • 2020-10-16
相关资源
最近更新 更多