python - 反转 Pandas DataFrame 中列顺序的大 O 复杂度是多少?

标签 python algorithm pandas numpy big-o

假设我在 pandas 中有一个具有 m 行和 n 列的 DataFrame。假设我想颠倒列的顺序,这可以通过以下代码完成:

df_reversed = df[df.columns[::-1]]

这个操作的 Big O 复杂度是多少?我假设这取决于列数,但它是否也取决于行数?

最佳答案

我不知道 Pandas 如何实现这一点,但我确实根据经验对其进行了测试。我运行了以下代码(在 Jupyter 笔记本中)来测试运行速度:

def get_dummy_df(n):
    return pd.DataFrame({'a': [1,2]*n, 'b': [4,5]*n, 'c': [7,8]*n})

df = get_dummy_df(100)
print df.shape
%timeit df_r = df[df.columns[::-1]]

df = get_dummy_df(1000)
print df.shape
%timeit df_r = df[df.columns[::-1]]

df = get_dummy_df(10000)
print df.shape
%timeit df_r = df[df.columns[::-1]]

df = get_dummy_df(100000)
print df.shape
%timeit df_r = df[df.columns[::-1]]

df = get_dummy_df(1000000)
print df.shape
%timeit df_r = df[df.columns[::-1]]

df = get_dummy_df(10000000)
print df.shape
%timeit df_r = df[df.columns[::-1]]

输出是:

(200, 3)
1000 loops, best of 3: 419 µs per loop
(2000, 3)
1000 loops, best of 3: 425 µs per loop
(20000, 3)
1000 loops, best of 3: 498 µs per loop
(200000, 3)
100 loops, best of 3: 2.66 ms per loop
(2000000, 3)
10 loops, best of 3: 25.2 ms per loop
(20000000, 3)
1 loop, best of 3: 207 ms per loop

如您所见,在前 3 种情况下,操作的开销是大部分时间(400-500µs),但从第 4 种情况开始,它所花费的时间开始与数量成正比数据,每次都增加一个数量级。

所以,假设 n 也必须有一个比例,看来我们正在处理 O(m*n)

关于python - 反转 Pandas DataFrame 中列顺序的大 O 复杂度是多少?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51486063/

相关文章:

python - 是否可以将 python pandas 中的 groupby 应用于已经分组的对象?

python - 让 setuptools 忽略 PyPI 存储库

Python_选择最长的AA序列

algorithm - 转换评级量表

algorithm - 递归到迭代 - 还是优化?

string - 二进制字符串中的反转

python - Pandas 逐个元素地减去两个数据帧的值

python - 根据 Pandas 中的其他信息更改数据框中的一小部分列

python - 是否有类似 "symbolic link"的东西(以 *nixes 术语)但对于 Plone 中 ZODB 中的对象?

python - 如何在 Pandas 中按列表删除行