【问题标题】:Reverse the order of a data frame columns反转数据框列的顺序
【发布时间】:2019-06-15 00:14:17
【问题描述】:

df.reindex(columns=reversed(df.columns)) 是按列反转pandas.DataFrame 的最快方法吗?

【问题讨论】:

标签: python python-3.x pandas


【解决方案1】:

一个想法 - 使用 DataFrame.iloc 和索引:

df = df.iloc[:, ::-1]

性能

np.random.seed(234)

df = pd.DataFrame(np.random.randint(10, size=(3, 10000))).rename(columns=str)
#print (df)

In [225]: %timeit df.reindex(columns=reversed(df.columns))
7.32 ms ± 166 µs per loop (mean ± std. dev. of 7 runs, 100 loops each)

In [226]: %timeit df.iloc[:, ::-1]
132 µs ± 6.02 µs per loop (mean ± std. dev. of 7 runs, 10000 loops each)

#vdkotian solution
In [227]: %timeit df[df.columns[::-1]]
2.84 ms ± 60.7 µs per loop (mean ± std. dev. of 7 runs, 100 loops each)

【讨论】:

  • 根据我的结果需要同样的时间。
  • @Spenrose - 添加了回答时间,它更快。
【解决方案2】:

刚刚在示例数据集上尝试过。

sepal_length  sepal_width  petal_length  petal_width species
0           5.1          3.5           1.4          0.2  setosa
1           4.9          3.0           1.4          0.2  setosa
2           4.7          3.2           1.3          0.2  setosa
3           4.6          3.1           1.5          0.2  setosa
4           5.0          3.6           1.4          0.2  setosa
5           5.4          3.9           1.7          0.4  setosa
6           4.6          3.4           1.4          0.3  setosa
7           5.0          3.4           1.5          0.2  setosa
8           4.4          2.9           1.4          0.2  setosa
9           4.9          3.1           1.5          0.1  setosa

>>> df[df.columns[::-1]]


species  petal_width  petal_length  sepal_width  sepal_length
0  setosa          0.2           1.4          3.5           5.1
1  setosa          0.2           1.4          3.0           4.9
2  setosa          0.2           1.3          3.2           4.7
3  setosa          0.2           1.5          3.1           4.6
4  setosa          0.2           1.4          3.6           5.0
5  setosa          0.4           1.7          3.9           5.4
6  setosa          0.3           1.4          3.4           4.6
7  setosa          0.2           1.5          3.4           5.0
8  setosa          0.2           1.4          2.9           4.4
9  setosa          0.1           1.5          3.1           4.9

df.column[::-1] 按照列的顺序反转数据帧的顺序,然后 df[..] 重新索引它。

使用 iloc 索引器可以更简洁地实现相同目的:

df.iloc[:, ::-1]

第一个 : 表示“取所有行”, ::-1 表示后退通过列。

参考见link https://stackoverflow.com/questions/27817718/reverse-dataframe-column-order

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-05-16
    • 2023-01-18
    • 2015-03-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多