Saya memiliki yang berikut DataFrame
( df
):
import numpy as np
import pandas as pd
df = pd.DataFrame(np.random.rand(10, 5))
Saya menambahkan lebih banyak kolom berdasarkan tugas:
df['mean'] = df.mean(1)
Bagaimana saya bisa memindahkan kolom mean
ke depan, yaitu mengaturnya sebagai kolom pertama meninggalkan urutan kolom lainnya tidak tersentuh?
MultiIndex
.Jawaban:
Salah satu cara mudah adalah dengan menugaskan kembali dataframe dengan daftar kolom, disusun ulang sesuai kebutuhan.
Inilah yang Anda miliki sekarang:
Atur ulang
cols
dengan cara apa pun yang Anda inginkan. Inilah cara saya memindahkan elemen terakhir ke posisi pertama:Kemudian susun ulang susunan data seperti ini:
sumber
cols
adalahlist
; bahkan memungkinkan duplikat (yang akan dibuang saat digunakan pada dataframe). Anda memikirkanIndex
benda.Anda juga dapat melakukan sesuatu seperti ini:
Anda bisa mendapatkan daftar kolom dengan:
Output akan menghasilkan:
... yang kemudian mudah diatur ulang secara manual sebelum menjatuhkannya ke fungsi pertama
sumber
df.columns.tolist()
df = df[['mean1', 0, 1, 2, 3]]
✓pd.read_csv()
. Bagaimana jawaban Anda digunakan untuk mengubah urutan kolom?Cukup berikan nama kolom sesuai urutan yang Anda inginkan:
Sekarang, kolom 'berarti' keluar di depan:
sumber
<df>.columns
seperti yang Anda klaim pada awalnyaBagaimana tentang:
http://pandas.pydata.org/pandas-docs/stable/dsintro.html#column-selection-addition-deletion
sumber
pandas
? sesuatu sepertidf.move(0,df.mean)
?df_metadata.insert(0,'Db_name',"raw_data")
(Kode tidak relevan dengan utas ini)*** ValueError: cannot insert mean, already exists
Dalam kasus anda,
akan melakukan apa yang Anda inginkan.
Dalam kasus saya (bentuk umum):
sumber
copy=False
tetapi sepertinyareindex_axis
masih membuat salinan.Anda perlu membuat daftar baru kolom Anda dalam urutan yang diinginkan, kemudian gunakan
df = df[cols]
untuk mengatur ulang kolom dalam urutan baru ini.Anda juga dapat menggunakan pendekatan yang lebih umum. Dalam contoh ini, kolom terakhir (ditunjukkan oleh -1) dimasukkan sebagai kolom pertama.
Anda juga dapat menggunakan pendekatan ini untuk menyusun ulang kolom dalam urutan yang diinginkan jika mereka hadir dalam DataFrame.
sumber
Anda dapat mencoba solusi berikut:
Solusi 1:
Solusi 2:
Solusi 3:
Solusi 4:
Solusi 5:
solusi 6:
Perbandingan waktu:
Solusi 1:
Solusi 2 :
Solusi 3 :
Solusi 4 :
Solusi 5 :
Solusi 6 :
sumber
df = df.iloc[:, [1, 2, 3, 0]]
Dari Agustus 2018:
Jika nama kolom Anda terlalu panjang untuk diketik maka Anda dapat menentukan pesanan baru melalui daftar bilangan bulat dengan posisi:
Data:
Contoh umum:
Dan untuk kasus spesifik pertanyaan OP:
Masalah utama dengan pendekatan ini adalah bahwa memanggil kode yang sama beberapa kali akan menghasilkan hasil yang berbeda setiap kali, jadi kita harus berhati-hati :)
sumber
Fungsi ini menghindari Anda harus membuat daftar setiap variabel dalam dataset Anda hanya untuk memesan beberapa dari mereka.
Dibutuhkan dua argumen, yang pertama adalah dataset, yang kedua adalah kolom dalam kumpulan data yang ingin Anda bawa ke depan.
Jadi dalam kasus saya, saya memiliki satu set data yang disebut Frame dengan variabel A1, A2, B1, B2, Total dan Tanggal. Jika saya ingin membawa Total ke depan maka yang harus saya lakukan adalah:
Jika saya ingin membawa Total dan Tanggal ke depan maka saya lakukan:
EDIT:
Cara lain yang bermanfaat untuk menggunakan ini adalah, jika Anda memiliki tabel asing dan Anda sedang mencari variabel dengan istilah tertentu di dalamnya, seperti VAR1, VAR2, ... Anda dapat menjalankan sesuatu seperti:
sumber
Saya mengalami pertanyaan serupa, dan hanya ingin menambahkan apa yang saya setujui. Saya menyukai
reindex_axis() method
untuk mengubah urutan kolom. Ini berhasil:Metode alternatif berdasarkan komentar dari @Jorge:
Meskipun
reindex_axis
tampaknya sedikit lebih cepat dalam benchmark mikro daripadareindex
, saya pikir saya lebih suka yang terakhir karena keterusterangannya.sumber
Lakukan saja,
sumber
order = df.columns.tolist()
df['mean'] = df.mean(1)
df.columns = ['mean'] + order
headers
,, yang digunakan untuk membuat dict yang kemudian digunakan untuk membuat DataFrame, saya menelepondf.reindex(columns=headers)
. Satu-satunya masalah yang saya temui adalah saya sudah menelepondf.set_index('some header name', inplace=True)
, jadi ketika reindex selesai, itu menambahkan kolom lain bernamasome header name
sejak kolom asli sekarang indeks. Adapun sintaks yang ditentukan di atas,['mean'] + df.columns
dalam interpreter python memberi sayaIndex(u'meanAddress', u'meanCity', u'meanFirst Name'...
Anda dapat melakukan hal berikut (meminjam bagian dari jawaban Aman):
sumber
Cukup ketikkan nama kolom yang ingin Anda ubah, dan atur indeks untuk lokasi baru.
Untuk kasus Anda, ini akan seperti:
sumber
Memindahkan kolom apa saja ke posisi apa pun:
sumber
Saya pikir ini adalah solusi yang sedikit lebih rapi:
Solusi ini agak mirip dengan solusi @JoeHeffer tetapi ini adalah satu liner.
Di sini kita menghapus kolom
"mean"
dari kerangka data dan melampirkannya untuk diindeks0
dengan nama kolom yang sama.sumber
Berikut adalah cara untuk memindahkan satu kolom yang ada yang akan mengubah kerangka data yang ada di tempatnya.
sumber
Pertanyaan ini telah dijawab sebelumnya tetapi reindex_axis sudah usang sekarang jadi saya akan menyarankan untuk menggunakan:
sumber
Bagaimana kalau menggunakan "T"?
sumber
@clocker: Solusi Anda sangat membantu bagi saya, karena saya ingin membawa dua kolom di depan dari kerangka data di mana saya tidak tahu persis nama semua kolom, karena mereka dihasilkan dari pernyataan pivot sebelumnya. Jadi, jika Anda berada dalam situasi yang sama: Untuk membawa kolom di depan yang Anda tahu nama dan kemudian membiarkannya diikuti oleh "semua kolom lainnya", saya datang dengan solusi umum berikut;
sumber
set()
:Pendekatan sederhana digunakan
set()
, khususnya ketika Anda memiliki daftar kolom yang panjang dan tidak ingin menanganinya secara manual:sumber
Saya menyukai jawaban Shoresh untuk menggunakan fungsi yang ditetapkan untuk menghapus kolom ketika Anda tidak tahu lokasi, namun ini tidak berfungsi untuk tujuan saya karena saya harus menjaga urutan kolom asli (yang memiliki label kolom sewenang-wenang).
Saya mendapatkan ini berfungsi meskipun dengan menggunakan IndexedSet dari paket boltons.
Saya juga perlu menambahkan kembali beberapa label kolom, jadi untuk kasus yang lebih umum saya menggunakan kode berikut:
Semoga ini bermanfaat bagi siapa pun yang mencari utas ini untuk solusi umum.
sumber
set
untuk tujuan ini cukup sering dan tidak pernah harus berurusan dengan pemesanan.Anda dapat menggunakan
reindex
yang dapat digunakan untuk kedua sumbu:sumber
Berikut adalah fungsi untuk melakukan ini untuk sejumlah kolom.
sumber
Metode paling rahasia dalam buku ini
sumber
Saya pikir fungsi ini lebih mudah. Anda hanya perlu menentukan subset kolom di awal atau di akhir atau keduanya:
sumber
Saya percaya jawaban Aman adalah yang terbaik jika Anda tahu lokasi kolom lainnya.
Jika Anda tidak tahu lokasi
mean
, tetapi hanya memiliki namanya, Anda tidak dapat menggunakan langsungcols = cols[-1:] + cols[:-1]
. Berikut ini adalah hal terbaik berikutnya yang bisa saya buat:sumber
Membalik saja sering membantu.
Atau hanya mengocok untuk melihatnya.
sumber
Sebagian besar jawaban tidak cukup menggeneralisasi dan metode reindex_axis panda sedikit membosankan, maka saya menawarkan fungsi sederhana untuk memindahkan jumlah kolom sewenang-wenang ke posisi apa pun menggunakan kamus di mana kunci = nama kolom dan nilai = posisi untuk pindah. Jika dataframe Anda besar, lewati True ke 'big_data', maka fungsinya akan mengembalikan daftar kolom yang diurutkan. Dan Anda bisa menggunakan daftar ini untuk mengiris data Anda.
sumber
Saya memiliki kasus penggunaan yang sangat spesifik untuk memesan ulang nama kolom dalam panda. Terkadang saya membuat kolom baru dalam kerangka data yang didasarkan pada kolom yang ada. Secara default panda akan memasukkan kolom baru saya di akhir, tapi saya ingin kolom baru dimasukkan di sebelah kolom yang sudah ada.
sumber
Solusi yang cukup mudah dan berhasil bagi saya adalah dengan menggunakan .reindex di df.columns:
sumber