英文:
Reverse the order of columns without changing the column labels pandas dataframe
问题
需要反转我的pandas数据框的顺序。但是使用以下代码:
df = pd.DataFrame({'A': [1, 2, 3], 'B': [4, 5, 6], 'C': [7, 8, 9]})
df = df.iloc[:, ::-1]
这也会反转列标签的顺序。如何只反转数据并保留列标签?我希望得到:
A B C
0 7 4 1
1 8 5 2
2 9 6 3
英文:
I need to reverse the order of my pandas dataframe. But using the following code:
df = pd.DataFrame({'A': [1, 2, 3], 'B': [4, 5, 6], 'C': [7, 8, 9]})
df = df.iloc[:, ::-1]
also reverses the order of the column labels. How can i reverse only the data and maintain the column labels? I expect to get:
A B C
0 7 4 1
1 8 5 2
2 9 6 3
答案1
得分: 4
If large DataFrame and performance is important assign to new Dataframe by constructor:
如果有大型的DataFrame并且性能很重要,可以使用构造函数分配给新的DataFrame:
df = pd.DataFrame(np.random.randint(10, size=(1000,1000))).add_prefix('col')
In [108]: %timeit df[:] = df.values[:, ::-1]
5.19毫秒 ± 555微秒 每次循环(平均值 ± 7次的标准偏差,每次循环100次)
In [109]: %timeit df[:] = df.iloc[:, ::-1].to_numpy()
5.34毫秒 ± 288微秒 每次循环(平均值 ± 7次的标准偏差,每次循环100次)
In [110]: %timeit df.iloc[:, ::-1].set_axis(df.columns, axis=1)
2.42毫秒 ± 357微秒 每次循环(平均值 ± 7次的标准偏差,每次循环100次)
In [111]: %timeit pd.DataFrame(df.iloc[:, ::-1].to_numpy(), index=df.index, columns=df.columns)
102微秒 ± 3.45微秒 每次循环(平均值 ± 7次的标准偏差,每次循环10000次)
In [112]: %timeit pd.DataFrame(df.to_numpy()[:, ::-1], index=df.index, columns=df.columns)
43.7微秒 ± 240纳秒 每次循环(平均值 ± 7次的标准偏差,每次循环10000次)
英文:
If large DataFrame and performance is important assign to new Dataframe by constructor:
df = pd.DataFrame(np.random.randint(10, size=(1000,1000))).add_prefix('col')
# print (df)
In [108]: %timeit df[:] = df.values[:, ::-1]
5.19 ms ± 555 µs per loop (mean ± std. dev. of 7 runs, 100 loops each)
In [109]: %timeit df[:] = df.iloc[:, ::-1].to_numpy()
5.34 ms ± 288 µs per loop (mean ± std. dev. of 7 runs, 100 loops each)
In [110]: %timeit df.iloc[:, ::-1].set_axis(df.columns, axis=1)
2.42 ms ± 357 µs per loop (mean ± std. dev. of 7 runs, 100 loops each)
In [111]: %timeit pd.DataFrame(df.iloc[:, ::-1].to_numpy(), index=df.index,columns=df.columns)
102 µs ± 3.45 µs per loop (mean ± std. dev. of 7 runs, 10000 loops each)
In [112]: %timeit pd.DataFrame(df.to_numpy()[:, ::-1], index=df.index, columns=df.columns)
43.7 µs ± 240 ns per loop (mean ± std. dev. of 7 runs, 10000 loops each)
答案2
得分: 2
要在原地修改,请使用:
df[:] = df.iloc[:, ::-1].to_numpy()
或者,要创建一个新对象,请使用:
out = df.iloc[:, ::-1].set_axis(df.columns, axis=1)
英文:
To modify in place, use:
df[:] = df.iloc[:, ::-1].to_numpy()
Or, for a new object:
out = df.iloc[:, ::-1].set_axis(df.columns, axis=1)
答案3
得分: 2
使用最短的分配语句:
df[:] = df.values[:, ::-1]
A B C
0 1 4 7
1 2 5 8
2 3 6 9
英文:
With shortest assignment:
df[:] = df.values[:, ::-1]
A B C
0 7 4 1
1 8 5 2
2 9 6 3
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论