【问题标题】:Most efficient way to compute a square dataframe in pandas在熊猫中计算方形数据框的最有效方法
【发布时间】:2020-07-24 05:05:27
【问题描述】:

全部,

我目前正在计算一系列方形 pandas DataFrame 对象作为引导算法的一部分,虽然我可以正确计算它,但迄今为止我还没有高效地计算它。

目前,数据帧的计算方式如下,使用函数 func,该函数根据数据的性质而有所不同:

frame = pandas.DataFrame(0, index=idx, columns=idx)
for row in idx:
    for col in idx:
        frame.loc[row, col] = func(row, col)

不幸的是,构建的方阵最终可能会非常大(最多 10k 个单元),因此上述运行可能会非常缓慢。有什么方法可以比使用 pandas 和/或 numpy 的嵌套循环方法更有效地执行此构造?

【问题讨论】:

  • @Eric Truett,不,这不是同一个问题,因为 OP 希望将函数应用于索引值,而不是单元格值本身。
  • 如果您在 NumPy 中将其计算为 ndarray,而不使用 pandas,它应该会快得多。最后,您仍然可以将结果转换为 DataFrame。

标签: python pandas


【解决方案1】:

在 NumPy 中应该更快,并且您可以使用嵌套列表推导而不是显式循环:

import numpy as np

# example function
def func(i, j):
    return 10 * i + j

# example index
idx = [0, 1, 2, 3]

frame = np.array([[func(row, col) for col in idx] for row in idx])       
frame
array([[ 0,  1,  2,  3],
       [10, 11, 12, 13],
       [20, 21, 22, 23],
       [30, 31, 32, 33]])

如果需要,您当然可以将结果转换为 DataFrame:

import pandas as pd
frame = pd.DataFrame(frame)

【讨论】:

  • 正是我需要的,而且比嵌套循环快得多,谢谢
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2022-01-18
  • 2013-12-03
  • 2020-12-04
  • 1970-01-01
  • 1970-01-01
  • 2017-07-12
  • 2020-01-11
相关资源
最近更新 更多