Misalkan saya memiliki bingkai data panda df
:
Saya ingin menghitung rata-rata kolom dari bingkai data.
Ini mudah:
df.apply(average)
maka kolom bijak kisaran maks (col) - min (col). Ini mudah lagi:
df.apply(max) - df.apply(min)
Sekarang untuk setiap elemen saya ingin mengurangi rata-rata kolomnya dan membaginya dengan rentang kolomnya. Saya tidak yakin bagaimana melakukan itu
Setiap bantuan / petunjuk sangat dihargai.
A
danB
merupakan bagian dari faktor pengelompokan yang lebih besar yang ingin Anda normalkan secara terpisah dariC
danD
.Jika Anda tidak keberatan mengimpor
sklearn
perpustakaan, saya akan merekomendasikan metode yang dibicarakan di blog ini .sumber
np_scaled = min_max_scaler.fit_transform(df.score.astype(float).values.reshape(-1, 1))
Anda dapat menggunakan
apply
ini, dan ini sedikit lebih rapi:Juga, ini berfungsi dengan baik
groupby
, jika Anda memilih kolom yang relevan:sumber
Sedikit dimodifikasi dari: Python Pandas Dataframe: Normalisasi data antara 0,01 dan 0,99? tetapi dari beberapa komentar berpikir itu relevan (maaf jika dianggap sebagai repost ...)
Saya ingin normalisasi khusus dalam persentil reguler datum atau z-score tidak memadai. Kadang-kadang saya tahu apa yang layak dan minimum dari populasi itu, dan karena itu ingin mendefinisikannya selain sampel saya, atau titik tengah yang berbeda, atau apa pun! Ini sering berguna untuk menskalakan dan menormalkan data untuk jaring saraf di mana Anda mungkin ingin semua input antara 0 dan 1, tetapi beberapa data Anda mungkin perlu diskalakan dengan cara yang lebih khusus ... karena persentil dan stdev mengasumsikan sampul sampel Anda populasi, tetapi kadang-kadang kita tahu ini tidak benar. Itu juga sangat berguna bagi saya ketika memvisualisasikan data dalam heatmaps. Jadi saya membangun fungsi khusus (menggunakan langkah-langkah tambahan dalam kode di sini untuk membuatnya terbaca mungkin):
Ini akan mengambil seri panda, atau bahkan hanya daftar dan menormalkannya ke titik rendah, tengah, dan tinggi yang Anda tentukan. juga ada faktor menyusut! untuk memungkinkan Anda mengurangi data dari titik 0 dan 1 (saya harus melakukan ini ketika menggabungkan colormaps di matplotlib: PColormesh tunggal dengan lebih dari satu colormap menggunakan Matplotlib ) Jadi Anda mungkin dapat melihat bagaimana kode bekerja, tetapi pada dasarnya mengatakan Anda memiliki nilai [-5,1,10] dalam sampel, tetapi ingin menormalkan berdasarkan rentang -7 hingga 7 (jadi apa pun di atas 7, "10" kami diperlakukan sebagai 7 secara efektif) dengan titik tengah 2, tetapi menyusutkan agar sesuai dengan colormap 256 RGB:
Ini juga dapat mengubah data Anda ke dalam ... ini mungkin tampak aneh, tetapi saya menemukan itu berguna untuk memetakan. Katakanlah Anda menginginkan warna yang lebih gelap untuk nilai yang lebih dekat ke 0 daripada hi / rendah. Anda dapat memetakan berdasarkan data yang dinormalisasi di mana insideout = True:
Jadi sekarang "2" yang paling dekat dengan pusat, didefinisikan sebagai "1" adalah nilai tertinggi.
Bagaimanapun, saya pikir aplikasi saya relevan jika Anda ingin mengubah skala data dengan cara lain yang bisa memiliki aplikasi yang berguna bagi Anda.
sumber
Ini adalah bagaimana Anda melakukannya dengan bijaksana:
sumber