Menata ulang kolom di panda telah ditanyakan sebelumnya di banyak utas.

Saya dapat print kolom saya dan menyalin tempel apa pun yang saya perlukan untuk menyusun ulang di pandas. Namun, saya bertanya-tanya apakah saya memiliki lebih dari 20 kolom, dapatkah saya mengatur ulang menggunakan nomor kolom? Saya tahu di R ini bisa dilakukan seperti ini,

new_df <- my_df[,c(1:9, 11:21, 10)]

Saya mencoba hal yang sama di bawah di pandas, tetapi mendapatkan SyntaxError,

new_df = my_df[[:, 1:9, 11:21, 10]]

Saya telah mencari dan tidak dapat menemukan dokumen untuk merujuk untuk mendapatkan jawaban. Apakah ada hal seperti itu di pandas yang bisa saya lakukan dalam satu baris seperti di R?

2
i.n.n.m 10 Agustus 2017, 20:56

2 jawaban

Jawaban Terbaik

Saya rasa Anda perlu numpy.r_ untuk indeks gabungan:

new_df = my_df.iloc[:, np.r_[1:9, 11:21, 10]]

Sampel:

np.random.seed(100)
my_df = pd.DataFrame(np.random.randint(10, size=(3,30)))

new_df = my_df.iloc[:, np.r_[1:9, 11:21, 10]]
print (new_df)
   1   2   3   4   5   6   7   8   11  12  13  14  15  16  17  18  19  20  10
0   8   3   7   7   0   4   2   5   2   1   0   8   4   0   9   6   2   4   2
1   7   0   2   9   9   3   2   5   0   7   6   2   0   8   2   5   1   8   1
2   6   3   4   7   6   3   9   0   5   7   6   6   2   4   2   7   1   6   4

new_df = my_df.iloc[:, np.r_[1:10, 11:22, 10]]
print (new_df)
   1   2   3   4   5   6   7   8   9   11 ...  13  14  15  16  17  18  19  20  \
0   8   3   7   7   0   4   2   5   2   2 ...   0   8   4   0   9   6   2   4   
1   7   0   2   9   9   3   2   5   8   0 ...   6   2   0   8   2   5   1   8   
2   6   3   4   7   6   3   9   0   4   5 ...   6   6   2   4   2   7   1   6   

   21  10  
0   1   2  
1   1   1  
2   6   4  

[3 rows x 21 columns]

Solusi dengan range:

a = list(range(1,10)) + list(range(11,22)) + [10]
new_df = my_df.iloc[:, a]
print (new_df)
   1   2   3   4   5   6   7   8   9   11 ...  13  14  15  16  17  18  19  20  \
0   8   3   7   7   0   4   2   5   2   2 ...   0   8   4   0   9   6   2   4   
1   7   0   2   9   9   3   2   5   8   0 ...   6   2   0   8   2   5   1   8   
2   6   3   4   7   6   3   9   0   4   5 ...   6   6   2   4   2   7   1   6   

   21  10  
0   1   2  
1   1   1  
2   6   4  

[3 rows x 21 columns]
3
jezrael 10 Agustus 2017, 18:06

Kita dapat menggunakan np.r_[]:

new_df = my_df.iloc[:, np.r_[1:9, 11:21, 10]]

Demo:

In [7]: df = pd.DataFrame(np.random.randint(5, size=(2, 21)))

In [8]: df
Out[8]:
   0   1   2   3   4   5   6   7   8   9  ...  11  12  13  14  15  16  17  18  19  20
0   2   1   2   2   1   0   4   4   4   2 ...   0   4   4   4   3   2   1   2   1   4
1   1   4   4   4   1   3   4   4   3   3 ...   1   2   3   4   2   0   1   0   2   1

[2 rows x 21 columns]

In [9]: df.iloc[:, np.r_[1:9, 11:21, 10]]
Out[9]:
   1   2   3   4   5   6   7   8   11  12  13  14  15  16  17  18  19  20  10
0   1   2   2   1   0   4   4   4   0   4   4   4   3   2   1   2   1   4   0
1   4   4   4   1   3   4   4   3   1   2   3   4   2   0   1   0   2   1   0
3
MaxU 10 Agustus 2017, 18:00