- Apa itu inden?
- Bagaimana saya berputar?
- Apakah ini poros?
- Format panjang ke format lebar?
Saya telah melihat banyak pertanyaan yang bertanya tentang tabel pivot. Bahkan jika mereka tidak tahu bahwa mereka bertanya tentang tabel pivot, mereka biasanya begitu. Hampir tidak mungkin untuk menulis pertanyaan dan jawaban kanonik yang mencakup semua aspek berputar ...
... Tapi aku akan mencobanya.
Masalah dengan pertanyaan dan jawaban yang ada adalah bahwa seringkali pertanyaan itu difokuskan pada nuansa bahwa OP mengalami kesulitan generalisasi untuk menggunakan sejumlah jawaban baik yang ada. Namun, tidak ada jawaban yang mencoba memberikan penjelasan yang komprehensif (karena itu tugas yang menakutkan)
Lihat beberapa contoh dari pencarian google saya
- Bagaimana cara memutar bingkai data di Panda?
- Pertanyaan dan jawaban yang bagus. Tetapi jawabannya hanya menjawab pertanyaan spesifik dengan sedikit penjelasan.
- panda pivot table ke bingkai data
- Dalam pertanyaan ini, OP prihatin dengan output pivot. Yaitu bagaimana tampilan kolom. OP ingin agar terlihat seperti R. Ini tidak sangat membantu bagi pengguna panda.
- panda memutar bingkai data, duplikat baris
- Pertanyaan layak lainnya tetapi jawabannya berfokus pada satu metode, yaitu
pd.DataFrame.pivot
- Pertanyaan layak lainnya tetapi jawabannya berfokus pada satu metode, yaitu
Jadi setiap kali seseorang mencari pivot
mereka mendapatkan hasil sporadis yang kemungkinan tidak akan menjawab pertanyaan spesifik mereka.
Mendirikan
Anda mungkin memperhatikan bahwa saya secara mencolok menamai kolom saya dan nilai kolom yang relevan agar sesuai dengan bagaimana saya akan berputar dalam jawaban di bawah ini.
import numpy as np
import pandas as pd
from numpy.core.defchararray import add
np.random.seed([3,1415])
n = 20
cols = np.array(['key', 'row', 'item', 'col'])
arr1 = (np.random.randint(5, size=(n, 4)) // [2, 1, 2, 1]).astype(str)
df = pd.DataFrame(
add(cols, arr1), columns=cols
).join(
pd.DataFrame(np.random.rand(n, 2).round(2)).add_prefix('val')
)
print(df)
key row item col val0 val1
0 key0 row3 item1 col3 0.81 0.04
1 key1 row2 item1 col2 0.44 0.07
2 key1 row0 item1 col0 0.77 0.01
3 key0 row4 item0 col2 0.15 0.59
4 key1 row0 item2 col1 0.81 0.64
5 key1 row2 item2 col4 0.13 0.88
6 key2 row4 item1 col3 0.88 0.39
7 key1 row4 item1 col1 0.10 0.07
8 key1 row0 item2 col4 0.65 0.02
9 key1 row2 item0 col2 0.35 0.61
10 key2 row0 item2 col1 0.40 0.85
11 key2 row4 item1 col2 0.64 0.25
12 key0 row2 item2 col3 0.50 0.44
13 key0 row4 item1 col4 0.24 0.46
14 key1 row3 item2 col3 0.28 0.11
15 key0 row3 item1 col1 0.31 0.23
16 key0 row0 item2 col3 0.86 0.01
17 key0 row4 item0 col3 0.64 0.21
18 key2 row2 item2 col0 0.13 0.45
19 key0 row2 item0 col4 0.37 0.70
Pertanyaan
Kenapa saya bisa
ValueError: Index contains duplicate entries, cannot reshape
Bagaimana cara saya berporos
df
sehinggacol
nilainya adalah kolom,row
nilainya adalah indeks, dan rata-rataval0
nilainya?col col0 col1 col2 col3 col4 row row0 0.77 0.605 NaN 0.860 0.65 row2 0.13 NaN 0.395 0.500 0.25 row3 NaN 0.310 NaN 0.545 NaN row4 NaN 0.100 0.395 0.760 0.24
Bagaimana cara saya berporos
df
sehinggacol
nilainya adalah kolom,row
nilainya adalah indeks,val0
nilainya adalah nilainya, dan nilainya hilang0
?col col0 col1 col2 col3 col4 row row0 0.77 0.605 0.000 0.860 0.65 row2 0.13 0.000 0.395 0.500 0.25 row3 0.00 0.310 0.000 0.545 0.00 row4 0.00 0.100 0.395 0.760 0.24
Bisakah saya mendapatkan sesuatu selain
mean
, seperti mungkinsum
?col col0 col1 col2 col3 col4 row row0 0.77 1.21 0.00 0.86 0.65 row2 0.13 0.00 0.79 0.50 0.50 row3 0.00 0.31 0.00 1.09 0.00 row4 0.00 0.10 0.79 1.52 0.24
Bisakah saya melakukan lebih dari satu agregasi sekaligus?
sum mean col col0 col1 col2 col3 col4 col0 col1 col2 col3 col4 row row0 0.77 1.21 0.00 0.86 0.65 0.77 0.605 0.000 0.860 0.65 row2 0.13 0.00 0.79 0.50 0.50 0.13 0.000 0.395 0.500 0.25 row3 0.00 0.31 0.00 1.09 0.00 0.00 0.310 0.000 0.545 0.00 row4 0.00 0.10 0.79 1.52 0.24 0.00 0.100 0.395 0.760 0.24
Bisakah saya menggabungkan beberapa kolom nilai?
val0 val1 col col0 col1 col2 col3 col4 col0 col1 col2 col3 col4 row row0 0.77 0.605 0.000 0.860 0.65 0.01 0.745 0.00 0.010 0.02 row2 0.13 0.000 0.395 0.500 0.25 0.45 0.000 0.34 0.440 0.79 row3 0.00 0.310 0.000 0.545 0.00 0.00 0.230 0.00 0.075 0.00 row4 0.00 0.100 0.395 0.760 0.24 0.00 0.070 0.42 0.300 0.46
Bisakah Dibagi lagi dengan banyak kolom?
item item0 item1 item2 col col2 col3 col4 col0 col1 col2 col3 col4 col0 col1 col3 col4 row row0 0.00 0.00 0.00 0.77 0.00 0.00 0.00 0.00 0.00 0.605 0.86 0.65 row2 0.35 0.00 0.37 0.00 0.00 0.44 0.00 0.00 0.13 0.000 0.50 0.13 row3 0.00 0.00 0.00 0.00 0.31 0.00 0.81 0.00 0.00 0.000 0.28 0.00 row4 0.15 0.64 0.00 0.00 0.10 0.64 0.88 0.24 0.00 0.000 0.00 0.00
Atau
item item0 item1 item2 col col2 col3 col4 col0 col1 col2 col3 col4 col0 col1 col3 col4 key row key0 row0 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.86 0.00 row2 0.00 0.00 0.37 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.50 0.00 row3 0.00 0.00 0.00 0.00 0.31 0.00 0.81 0.00 0.00 0.00 0.00 0.00 row4 0.15 0.64 0.00 0.00 0.00 0.00 0.00 0.24 0.00 0.00 0.00 0.00 key1 row0 0.00 0.00 0.00 0.77 0.00 0.00 0.00 0.00 0.00 0.81 0.00 0.65 row2 0.35 0.00 0.00 0.00 0.00 0.44 0.00 0.00 0.00 0.00 0.00 0.13 row3 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.28 0.00 row4 0.00 0.00 0.00 0.00 0.10 0.00 0.00 0.00 0.00 0.00 0.00 0.00 key2 row0 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.40 0.00 0.00 row2 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.13 0.00 0.00 0.00 row4 0.00 0.00 0.00 0.00 0.00 0.64 0.88 0.00 0.00 0.00 0.00 0.00
Dapatkah saya menggabungkan frekuensi di mana kolom dan baris muncul bersamaan, alias "tabulasi silang"?
col col0 col1 col2 col3 col4 row row0 1 2 0 1 1 row2 1 0 2 1 2 row3 0 1 0 2 0 row4 0 1 2 2 1
Bagaimana cara mengonversi DataFrame dari panjang ke lebar dengan berputar pada HANYA dua kolom? Diberikan,
np.random.seed([3, 1415]) df2 = pd.DataFrame({'A': list('aaaabbbc'), 'B': np.random.choice(15, 8)}) df2 A B 0 a 0 1 a 11 2 a 2 3 a 11 4 b 10 5 b 10 6 b 14 7 c 7
Yang diharapkan akan terlihat seperti
a b c 0 0.0 10.0 7.0 1 11.0 10.0 NaN 2 2.0 14.0 NaN 3 11.0 NaN NaN
Bagaimana cara meratakan beberapa indeks menjadi satu indeks setelahnya
pivot
Dari
1 2 1 1 2 a 2 1 1 b 2 1 0 c 1 0 0
Untuk
1|1 2|1 2|2 a 2 1 1 b 2 1 0 c 1 0 0
KeyError: 'A'
. Apakah ada lebih banyak jawaban?'A'
anggap ada kolom'A'
dalam bingkai data Anda untuk dikelompokkan berdasarkan.Untuk memperluas jawaban @ piRSquared versi lain dari Pertanyaan 10
Pertanyaan 10.1
DataFrame:
Keluaran:
Menggunakan
df.groupby
danpd.Series.tolist
Atau A jauh lebih baik alternatif menggunakan
pd.pivot_table
dengandf.squeeze.
sumber