Filter bingkai data yang dikelompokkan di DataFrames.jl – Beragampengetahuan
Oleh: Blog Bogumił Kamiński
Repost dari:
Di DataFrames.jl, bingkai data dapat dikelompokkan berdasarkan kolom.
Dengan cara ini tampilannya dibuat. Jenis tampilan ini
Menjadi GroupedDataFrame dan memungkinkan kerja kelompok
beroperasi pada data yang disimpan dalam bingkai data asli.
Jika Anda menggunakan SQL maka Anda dapat memikirkannya GroupedDataFrame
sebagai objek yang diperoleh dengan menggunakan GROUP BY meminta
tetapi tidak melakukan langkah agregat. Ini sering
berguna setelah mengelompokkan data yang mungkin ingin Anda lakukan
beberapa operasi agregat yang berbeda di atasnya tanpa
harus mengelompokkannya setiap saat.
Pada postingan kali ini saya ingin membahas tentang filteringGroupedDataFrame bekerja di DataFrames.jl.
Secara umum, ada dua cara Anda mungkin ingin memfilternya:
- dengan menghilangkan seluruh kelompok;
- dengan menjatuhkan baris dalam grup.
Saya akan membahas keduanya hari ini.
Posting ditulis di bawah Julia 1.9.0 dan DataFrames.jl 1.5.0.
Mulailah dengan membuat template GroupedDataFrame:
julia> using DataFrames
julia> df = DataFrame(x = repeat(1:4, 2), id=1:8)
8×2 DataFrame
Row │ x id
│ Int64 Int64
─────┼──────────────
1 │ 1 1
2 │ 2 2
3 │ 3 3
4 │ 4 4
5 │ 1 5
6 │ 2 6
7 │ 3 7
8 │ 4 8
julia> gdf = groupby(df, :x, sort=true);
julia> show(gdf, allgroups=true)
GroupedDataFrame with 4 groups based on key: x
Group 1 (2 rows): x = 1
Row │ x id
│ Int64 Int64
─────┼──────────────
1 │ 1 1
2 │ 1 5
Group 2 (2 rows): x = 2
Row │ x id
│ Int64 Int64
─────┼──────────────
1 │ 2 2
2 │ 2 6
Group 3 (2 rows): x = 3
Row │ x id
│ Int64 Int64
─────┼──────────────
1 │ 3 3
2 │ 3 7
Group 4 (2 rows): x = 4
Row │ x id
│ Int64 Int64
─────┼──────────────
1 │ 4 4
2 │ 4 8
Jenis aktivitas pertama adalah saat Anda ingin menghapus seluruh grup
dari kerangka data berkerumun Anda.
Pertama, misalkan Anda ingin menjatuhkan
kelompok pertama dan terakhir dari gdf. Anda dapat mencapai ini dengan mengindeks:
julia> gdf[[2, 3]]
GroupedDataFrame with 2 groups based on key: x
First Group (2 rows): x = 2
Row │ x id
│ Int64 Int64
─────┼──────────────
1 │ 2 2
2 │ 2 6
⋮
Last Group (2 rows): x = 3
Row │ x id
│ Int64 Int64
─────┼──────────────
1 │ 3 3
2 │ 3 7
julia> gdf[Not(begin, end)]
GroupedDataFrame with 2 groups based on key: x
First Group (2 rows): x = 2
Row │ x id
│ Int64 Int64
─────┼──────────────
1 │ 2 2
2 │ 2 6
⋮
Last Group (2 rows): x = 3
Row │ x id
│ Int64 Int64
─────┼──────────────
1 │ 3 3
2 │ 3 7
Sekarang misalkan Anda ingin menghapus grup di mana nilai grup
Mengubah :x adalah bilangan genap. Anda masih dapat menggunakan pengindeksan seperti ini:
julia> gdf[isodd.(getproperty.(keys(gdf), :x))]
GroupedDataFrame with 2 groups based on key: x
First Group (2 rows): x = 1
Row │ x id
│ Int64 Int64
─────┼──────────────
1 │ 1 1
2 │ 1 5
⋮
Last Group (2 rows): x = 3
Row │ x id
│ Int64 Int64
─────┼──────────────
1 │ 3 3
2 │ 3 7
Namun, pendekatan yang lebih umum digunakan filter fungsi:
julia> filter(sdf -> isodd(first(sdf.x)), gdf)
GroupedDataFrame with 2 groups based on key: x
First Group (2 rows): x = 1
Row │ x id
│ Int64 Int64
─────┼──────────────
1 │ 1 1
2 │ 1 5
⋮
Last Group (2 rows): x = 3
Row │ x id
│ Int64 Int64
─────┼──────────────
1 │ 3 3
2 │ 3 7
Jika Anda ingin memisahkan hasilnya, Anda dapat melewatinya ungroup=true DI DALAM filter:
julia> filter(sdf -> isodd(first(sdf.x)), gdf, ungroup=true)
4×2 DataFrame
Row │ x id
│ Int64 Int64
─────┼──────────────
1 │ 1 1
2 │ 1 5
3 │ 3 3
4 │ 3 7
Sekarang setelah Anda mengetahui cara menghapus seluruh grup, Anda mungkin bertanya-tanya bagaimana cara menghapus setiap baris
dalam kelompok. Asumsikan bahwa kita ingin menghapus dari setiap grup semua baris kecuali
baris dengan nilai terkecil adalah :id dalam kelompok. Anda dapat mencapai ini menggunakansubset fungsi:
julia> subset(gdf, :id => x -> x .== minimum(x))
4×2 DataFrame
Row │ x id
│ Int64 Int64
─────┼──────────────
1 │ 1 1
2 │ 2 2
3 │ 3 3
4 │ 4 4
Perhatikan bahwa secara default subset mengelompokkan data. Jika Anda ingin mengelompokkannya
mengatasi ungroup=false:
julia> show(subset(gdf, :id => x -> x .== minimum(x), ungroup=false),
allgroups=true)
GroupedDataFrame with 4 groups based on key: x
Group 1 (1 row): x = 1
Row │ x id
│ Int64 Int64
─────┼──────────────
1 │ 1 1
Group 2 (1 row): x = 2
Row │ x id
│ Int64 Int64
─────┼──────────────
1 │ 2 2
Group 3 (1 row): x = 3
Row │ x id
│ Int64 Int64
─────┼──────────────
1 │ 3 3
Group 4 (1 row): x = 4
Row │ x id
│ Int64 Int64
─────┼──────────────
1 │ 4 4
Saya harap Anda menemukan contoh menggunakan pengindeksan, filterDan subset
berguna dan mereka telah meningkatkan pemahaman Anda tentang opsi pemfilteran baris
tersedia di DataFrames.jl.
Terutama ingat itu filter Dan subset ada perbedaan
nilai default dari ungoup argumen kata kunci. Perbedaan ini memiliki
dibuat untuk mencerminkan fakta bahwa ketika melakukan filter biasanya kita tidak
ingin memisahkan data, sambil melakukan subset biasanya kita mau
untuk menjatuhkan grup.
Terkait
Software Terbaru Saat Ini
Aplikasi yang sedang trend saat ini
object oriented programming, programming language, programming adalah, web programming, belajar programming, tournament software, software, software adalah, contoh software, apa itu software, pengertian software, aplikasi, aplikasi penghasil uang, aplikasi bokep, aplikasi video, programming
#Filter #bingkai #data #yang #dikelompokkan #DataFrames.jl