パンダの同じ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に割り当てられています。私は何か間違ったことをしていますか?
チェーン上で値を割り当てるときに値を変更するため、.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
このようにして、より複雑な状況に外挿することができます。
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]