Python 在同一数据帧内交换行

Python 在同一数据帧内交换行,python,pandas,dataframe,rows,swap,Python,Pandas,Dataframe,Rows,Swap,我正在尝试交换pandas中相同数据帧内的行 我试过跑步 a = pd.DataFrame(data = [[1,2],[3,4]], index=range(2), columns = ['A', 'B']) b, c = a.iloc[0], a.iloc[1] a.iloc[0], a.iloc[1] = c, b 但我最后两行都显示了第二行(3,4)的值 即使变量b和c现在都分配给3和4,尽管我没有再次分配它们。我做错了什么吗?使用临时变量来存储使用.copy()的值,因为您在链上分配

我正在尝试交换pandas中相同数据帧内的行

我试过跑步

a = pd.DataFrame(data = [[1,2],[3,4]], index=range(2), columns = ['A', 'B'])
b, c = a.iloc[0], a.iloc[1]
a.iloc[0], a.iloc[1] = c, b
但我最后两行都显示了第二行(3,4)的值


即使变量b和c现在都分配给3和4,尽管我没有再次分配它们。我做错了什么吗?

使用临时变量来存储使用
.copy()
的值,因为您在链上分配值时正在更改值,即除非您使用copy,否则数据将直接更改

a = pd.DataFrame(data = [[1,2],[3,4]], index=range(2), columns = ['A', 'B'])
b, c = a.iloc[0], a.iloc[1]


temp = a.iloc[0].copy()
a.iloc[0] = c
a.iloc[1] = temp
或者你也可以直接使用copy-like

a = pd.DataFrame(data = [[1,2],[3,4]], index=range(2), columns = ['A', 'B'])
b, c = a.iloc[0].copy(), a.iloc[1].copy()
a.iloc[0],a.iloc[1] = c,b

通过这种方式,可以推断出更复杂的情况:

a = pd.DataFrame(data = [[1,2],[3,4]], index=range(2), columns = ['A', 'B'])
rows = a.index.to_list()
# Move the last row to the first index
rows = rows[-1:]+rows[:-1]
a=a.loc[rows]

接受的答案不会更改索引名称

如果只想更改行的顺序,则应使用
dataframe.reindex(arraylike)
。请注意,索引已更改

df=pd.DataFrame(数据=[[1,2],[4,5],[6,7]],索引=['a','b','c'],列=['a','b'])

df

df.reindex(['a','c','b']))


哦,是的,这解决了问题。非常感谢!我仍然不确定价值何时在一条链上。您认为在分配新变量时始终使用
.copy()
方法更安全吗?是的,默认情况下,它们保留对主对象的引用。无论您做什么更改,都会反映在主要对象上。所以你需要拷贝。