【发布时间】:2019-06-15 00:14:17
【问题描述】:
df.reindex(columns=reversed(df.columns)) 是按列反转pandas.DataFrame 的最快方法吗?
【问题讨论】:
标签: python python-3.x pandas
df.reindex(columns=reversed(df.columns)) 是按列反转pandas.DataFrame 的最快方法吗?
【问题讨论】:
标签: python python-3.x pandas
一个想法 - 使用 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)
【讨论】:
刚刚在示例数据集上尝试过。
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
【讨论】: