Saya memiliki contoh dataframe berikut:
df = pd.DataFrame(data = {'RecordID' : [1,1,1,1,1,2,2,2,2,3,3,3,3,4,4,4,4,5,5,5,5], 'DisplayLabel' : ['Source','Test','Value 1','Value 2','Value3','Source','Test','Value 1','Value 2','Source','Test','Value 1','Value 2','Source','Test','Value 1','Value 2','Source','Test','Value 1','Value 2'],
'Value' : ['Web','Logic','S','I','Complete','Person','Voice','>20','P','Mail','OCR','A','I','Dictation','Understandable','S','I','Web','Logic','R','S']})
yang menciptakan kerangka data ini:
+-------+----------+---------------+----------------+
| Index | RecordID | Display Label | Value |
+-------+----------+---------------+----------------+
| 0 | 1 | Source | Web |
| 1 | 1 | Test | Logic |
| 2 | 1 | Value 1 | S |
| 3 | 1 | Value 2 | I |
| 4 | 1 | Value 3 | Complete |
| 5 | 2 | Source | Person |
| 6 | 2 | Test | Voice |
| 7 | 2 | Value 1 | >20 |
| 8 | 2 | Value 2 | P |
| 9 | 3 | Source | Mail |
| 10 | 3 | Test | OCR |
| 11 | 3 | Value 1 | A |
| 12 | 3 | Value 2 | I |
| 13 | 4 | Source | Dictation |
| 14 | 4 | Test | Understandable |
| 15 | 4 | Value 1 | S |
| 16 | 4 | Value 2 | I |
| 17 | 5 | Source | Web |
| 18 | 5 | Test | Logic |
| 19 | 5 | Value 1 | R |
| 20 | 5 | Value 2 | S |
+-------+----------+---------------+----------------+
Saya mencoba untuk "unmelt" walaupun tidak persis sumber dan menguji kolom ke dalam kolom dataframe baru sehingga akan terlihat seperti ini:
+-------+----------+-----------+----------------+---------------+----------+
| Index | RecordID | Source | Test | Result | Value |
+-------+----------+-----------+----------------+---------------+----------+
| 0 | 1 | Web | Logic | Value 1 | S |
| 1 | 1 | Web | Logic | Value 2 | I |
| 2 | 1 | Web | Logic | Value 3 | Complete |
| 3 | 2 | Person | Voice | Value 1 | >20 |
| 4 | 2 | Person | Voice | Value 2 | P |
| 5 | 3 | Mail | OCR | Value 1 | A |
| 6 | 3 | Mail | OCR | Value 2 | I |
| 7 | 4 | Dictation | Understandable | Value 1 | S |
| 8 | 4 | Dictation | Understandable | Value 2 | I |
| 9 | 5 | Web | Logic | Value 1 | R |
| 10 | 5 | Web | Logic | Value 2 | S |
+-------+----------+-----------+----------------+---------------+----------+
Ini pemahaman saya bahwa pivot dan lebur akan melakukan seluruh kolom DisplayLabel dan bukan hanya beberapa nilai.
Setiap bantuan akan sangat dihargai karena saya telah membaca Pandas Melt dan Pandas Pivot serta beberapa referensi tentang stackoverflow dan saya tidak bisa menemukan cara untuk melakukan ini dengan cepat.
Terima kasih!
Value 1
berada di bawahLogic
baris Uji di DataFrame kedua Anda?Jawaban:
Kami dapat mencapai hasil Anda dengan menerapkan logika dan berputar, kami membagi data Anda dengan memeriksa apakah
DisplayLabel
berisiValue
dan kemudian kamijoin
kembali bersama-sama:Jika Anda ingin urutan kolom yang tepat sebagai contoh Anda, gunakan
DataFrame.reindex
:Secara detail - langkah demi langkah:
sumber
set_index
,unstack
lalumelt
Fungsi khusus untuk
groupby
Mendirikan
sumber
Saya mencoba pendekatan yang berbeda
pivot
untuk menggunakan pertamaunstack
dan kemudian mengonversi sebagianwide_to_long
(Maaf jika tidak efisien tetapi ini tampaknya mendapatkan hasil yang diinginkan)sumber