在同一个pandas数据帧中交换行

时间:2017-10-23 13:47:10

标签: python pandas dataframe rows swap

我试图在pandas中的同一个DataFrame中交换行。

我试过了

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,即使我没有再分配它们。我做错了吗?

4 个答案:

答案 0 :(得分:7)

使用临时变量来使用.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

或者您可以直接使用

这样的副本
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

答案 1 :(得分:0)

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

    a = pd.DataFrame(data = [[1,2],[3,4]], index=range(2), columns = ['A', 'B'])
    rows = a.index.tolist()
    rows = rows[-1:]+rows[:-1]
    a=a.loc[rows]

答案 2 :(得分:0)

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

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

enter image description here

答案 3 :(得分:0)

df = pd.DataFrame(data = [[1,2],[4,5],[6,7]], index=['a','b','c'], columns = [ 'A', 'B'])

df

Original DataFrame

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

enter image description here