假设我在 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/