web-dev-qa-db-ja.com

同じ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

しかし、最終的には両方の行に2番目の行(3,4)の値が表示されます。

変数bとcでさえ、再度割り当てなかったとしても、両方とも3と4に割り当てられています。私は何か間違ったことをしていますか?

6
Zac

チェーン上で値を割り当てるときに値を変更するため、.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
8
Bharath

このようにして、より複雑な状況に外挿することができます。

    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
Leonardo Nunes