Python 移动数据帧中的一行,但索引保持不变 将numpy作为np导入 作为pd进口熊猫 d=np.随机。随机数10,3 df=pd.DataFramed df 0 1 2 0 0.740335 0.957937 0.611504 1 0.164772 0.469355 0.310799 2 0.666506 0.030054 0.986393 3 0.191827 0.554556 0.707453 4 0.278617 0.532423 0.095124 5 0.659526 0.413681 0.588372 6 0.285892 0.466231 0.268647 7 0.559664 0.274913 0.618610 8 0.572839 0.490969 0.194019 9 0.028767 0.332626 0.290148 将第三行移到顶部 df.iloc[:3]=df.iloc[[2,0,1]] df 0 1 2 0 0.666506 0.030054 0.986393 1 0.740335 0.957937 0.611504 2 0.164772 0.469355 0.310799 3 0.191827 0.554556 0.707453 4 0.278617 0.532423 0.095124 5 0.659526 0.413681 0.588372 6 0.285892 0.466231 0.268647 7 0.559664 0.274913 0.618610 8 0.572839 0.490969 0.194019 9 0.028767 0.332626 0.290148

Python 移动数据帧中的一行,但索引保持不变 将numpy作为np导入 作为pd进口熊猫 d=np.随机。随机数10,3 df=pd.DataFramed df 0 1 2 0 0.740335 0.957937 0.611504 1 0.164772 0.469355 0.310799 2 0.666506 0.030054 0.986393 3 0.191827 0.554556 0.707453 4 0.278617 0.532423 0.095124 5 0.659526 0.413681 0.588372 6 0.285892 0.466231 0.268647 7 0.559664 0.274913 0.618610 8 0.572839 0.490969 0.194019 9 0.028767 0.332626 0.290148 将第三行移到顶部 df.iloc[:3]=df.iloc[[2,0,1]] df 0 1 2 0 0.666506 0.030054 0.986393 1 0.740335 0.957937 0.611504 2 0.164772 0.469355 0.310799 3 0.191827 0.554556 0.707453 4 0.278617 0.532423 0.095124 5 0.659526 0.413681 0.588372 6 0.285892 0.466231 0.268647 7 0.559664 0.274913 0.618610 8 0.572839 0.490969 0.194019 9 0.028767 0.332626 0.290148,python,pandas,dataframe,Python,Pandas,Dataframe,该指数保持不变 我试过了 df.index[:3]=df.index[[2,0,1]]引发错误或df.index.values[:3]=df.index.values[[2,0,1]],没有引发错误,但索引仍保持不变。iloc将尝试对齐索引 因此,当值被重新分配时,它们将直接返回到初始位置。索引0将与索引0对齐,索引1将与索引1对齐,等等 df.iloc[[2, 0, 1]] 注意索引值 要保留索引值,请将两个数据帧连接在一起,或者: 或 df之前: df之后: 以匹配显示的预期输出 要在不使

该指数保持不变

我试过了 df.index[:3]=df.index[[2,0,1]]引发错误或df.index.values[:3]=df.index.values[[2,0,1]],没有引发错误,但索引仍保持不变。

iloc将尝试对齐索引

因此,当值被重新分配时,它们将直接返回到初始位置。索引0将与索引0对齐,索引1将与索引1对齐,等等

df.iloc[[2, 0, 1]]
注意索引值

要保留索引值,请将两个数据帧连接在一起,或者:

df之前:

df之后:

以匹配显示的预期输出

要在不使用索引的情况下移动或防止对齐行为,请执行以下操作:

import numpy as np
import pandas as pd

np.random.seed(5)
d = np.random.rand(5, 3)
df = pd.DataFrame(d)

df.iloc[:3] = df.iloc[[2, 0, 1]].values

print(df)
df之后:

iloc将尝试对齐索引

因此,当值被重新分配时,它们将直接返回到初始位置。索引0将与索引0对齐,索引1将与索引1对齐,等等

df.iloc[[2, 0, 1]]
注意索引值

要保留索引值,请将两个数据帧连接在一起,或者:

df之前:

df之后:

以匹配显示的预期输出

要在不使用索引的情况下移动或防止对齐行为,请执行以下操作:

import numpy as np
import pandas as pd

np.random.seed(5)
d = np.random.rand(5, 3)
df = pd.DataFrame(d)

df.iloc[:3] = df.iloc[[2, 0, 1]].values

print(df)
df之后:


如果希望索引也反映更新的行,则需要使用

在[25]中:np.random.seed5 …:d=np.random.rand5,3 …:df=pd.DataFramed …:df 出[25]: 0 1 2 0 0.221993 0.870732 0.206719 1 0.918611 0.488411 0.611744 2 0.765908 0.518418 0.296801 3 0.187721 0.080741 0.738440 4 0.441309 0.158310 0.879937 [26]中:df.reindex[2,0,1,*df.index[3:] 出[26]: 0 1 2 2 0.765908 0.518418 0.296801 0 0.221993 0.870732 0.206719 1 0.918611 0.488411 0.611744 3 0.187721 0.080741 0.738440 4 0.441309 0.158310 0.879937
如果希望索引也反映更新的行,则需要使用

在[25]中:np.random.seed5 …:d=np.random.rand5,3 …:df=pd.DataFramed …:df 出[25]: 0 1 2 0 0.221993 0.870732 0.206719 1 0.918611 0.488411 0.611744 2 0.765908 0.518418 0.296801 3 0.187721 0.080741 0.738440 4 0.441309 0.158310 0.879937 [26]中:df.reindex[2,0,1,*df.index[3:] 出[26]: 0 1 2 2 0.765908 0.518418 0.296801 0 0.221993 0.870732 0.206719 1 0.918611 0.488411 0.611744 3 0.187721 0.080741 0.738440 4 0.441309 0.158310 0.879937 这个怎么样

np.random.seed(42)
df = pd.DataFrame(np.random.rand(10,3))
这个怎么样

np.random.seed(42)
df = pd.DataFrame(np.random.rand(10,3))

谢谢你的评论。我使用示例代码进行了编辑。在这种情况下,您是否希望前3行的索引也为2,0,1?是的,我希望索引与注释的值hanks一起移动。我使用示例代码进行了编辑。在这种情况下,您是否希望前3行的索引也为2,0,1?是的,我希望索引随着值Show about index移动?索引不随行移动。手动设置df.index.values[:3]=df.index.values[[2,0,1]]不起作用。您需要按照我在编辑中指出的那样连接各个部分,或者根据另一个答案创建一个新索引。请参见编辑@ddzzbbwwmm对我来说,这很奇怪df.iloc[[2,0,1]]返回一个数据帧,其索引也在移动,如您的帖子所示,但赋值只会更改值,而不会更改索引。这就是重点。iloc将索引对齐在一起。例如,在添加一个新列时,有很多操作需要数据帧的顺序不改变。您特别想了解熊猫数据帧的核心数据完整性特性之一。索引如何?索引不随行移动。手动设置df.index.values[:3]=df.index.values[[2,0,1]]不起作用。您需要按照我在编辑中指出的那样连接各个部分,或者根据另一个答案创建一个新索引。请参见编辑@ddzzbbwwmm对我来说,这很奇怪df.iloc[[2,0,1]]返回一个数据帧,其索引也在移动,如您的帖子所示,但赋值只会更改值,而不会更改索引。这就是重点。iloc将索引对齐在一起。有一个大熊猫作业吨在那里哟
例如,在添加新列时,您希望数据帧的顺序不改变。您特别尝试绕过pandas DataFrames的核心数据完整性功能之一。是的,这也是一个解决方案。谢谢你想把前三行排好,然后把剩下的附加在后面吗?是的,这也是一个解决方案。谢谢你想把前三行排好,然后把剩下的放在后面吗?
import numpy as np
import pandas as pd

np.random.seed(5)
d = np.random.rand(5, 3)
df = pd.DataFrame(d)

df.iloc[:3] = df.iloc[[2, 0, 1]].values

print(df)
          0         1         2
0  0.765908  0.518418  0.296801
1  0.221993  0.870732  0.206719
2  0.918611  0.488411  0.611744
3  0.187721  0.080741  0.738440
4  0.441309  0.158310  0.879937
np.random.seed(42)
df = pd.DataFrame(np.random.rand(10,3))
df = df.iloc[[2,0,1]].append(df.iloc[3:])