【问题标题】:Is there any way to do a task for each member of a list without loop in python?有没有办法在没有循环的情况下为列表中的每个成员执行任务?
【发布时间】:2017-07-10 01:52:02
【问题描述】:

我在 pandas 中有大量 256 行 5 列的数组,我想计算每列中 4 个数组成员的统计(最小值、最大值、平均值、...)特征。我写了以下代码,但它非常耗时:

for col in array:
    for j in range(0,256,1):
        min = array[col].iloc[j:j+4].min()
        max= array[col].iloc[j:j+4].max()
        (other functions)

因为我有很多阵列,我想为每个阵列执行此任务,这非常耗时。有没有什么方法可以写一个更简单的代码,没有循环,减少执行时间。

【问题讨论】:

  • 嗯,你到底在处理什么iloc 可能用于某些 pandas 数据结构。
  • 不提供细节并不容易。这使得它没有很好的定义。
  • 我不确定你是否可以在不使用 O(n) 时间的情况下对每个 n/4 个元素应用一个函数。
  • (@Unni:可悲的是,它甚至不是 n/k,而是 2n/k(进入和退出窗口/窗口大小),并且常数变差了。要么指向统计数据的链接触发了负担得起的近似值使用采样的结果 - 或不使用。)

标签: python pandas for-loop


【解决方案1】:

您想计算 pandas.DataFrame 的 4 个连续元素的最小值和最大值吗?

这可以使用 pandas rolling 来完成:

df.rolling(4).agg(['min', 'max']).shift(-3)

转换是必要的,因为 pandas 的默认设置是使窗口右对齐。

【讨论】:

    猜你喜欢
    • 2020-12-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-09-03
    • 2019-01-18
    • 2013-11-22
    • 2018-07-29
    • 2021-06-16
    相关资源
    最近更新 更多