Rumah >pembangunan bahagian belakang >Tutorial Python >Bagaimana untuk Menggabungkan Rentetan daripada Berbilang Baris dalam Panda Menggunakan Groupby?

Bagaimana untuk Menggabungkan Rentetan daripada Berbilang Baris dalam Panda Menggunakan Groupby?

Susan Sarandon
Susan Sarandonasal
2024-12-15 12:17:14532semak imbas

How to Concatenate Strings from Multiple Rows in Pandas Using Groupby?

Gabungkan Rentetan daripada Berbilang Baris menggunakan Pandas Groupby

Apabila bekerja dengan bingkai data, mungkin terdapat situasi di mana anda perlu menyatukan rentetan daripada berbilang baris sambil mengelompokkannya mengikut kriteria tertentu. Pandas menawarkan penyelesaian yang mudah untuk ini melalui fungsi groupby dan transformnya.

Pernyataan Masalah

Diberikan bingkai data dengan lajur 'nama,' 'teks' dan 'bulan ,' matlamatnya adalah untuk menggabungkan rentetan dalam lajur 'teks' untuk setiap gabungan unik 'nama' dan 'bulan.' Output yang dikehendaki ialah bingkai data dengan gabungan 'nama' dan 'bulan' yang unik serta nilai 'teks' yang digabungkan.

Penyelesaian

Untuk mencapai matlamat ini, anda boleh menggunakan langkah berikut:

  1. Kumpulkan rangka data mengikut 'nama' dan 'bulan' menggunakan groupby() fungsi.
  2. Gunakan fungsi transform() untuk menggunakan ungkapan lambda yang bergabung dengan entri 'teks' bagi setiap kumpulan.
  3. Untuk mengalih keluar baris pendua, lepaskan pendua daripada bingkai data yang terhasil menggunakan fungsi drop_duplicates().

Berikut ialah contoh kod:

import pandas as pd
from io import StringIO

data = StringIO("""
"name1","hej","2014-11-01"
"name1","du","2014-11-02"
"name1","aj","2014-12-01"
"name1","oj","2014-12-02"
"name2","fin","2014-11-01"
"name2","katt","2014-11-02"
"name2","mycket","2014-12-01"
"name2","lite","2014-12-01"
""")

# load string as stream into dataframe
df = pd.read_csv(data, header=0, names=["name", "text", "date"], parse_dates=[2])

# add column with month
df["month"] = df["date"].apply(lambda x: x.month)

df['text'] = df[['name','text','month']].groupby(['name','month'])['text'].transform(lambda x: ','.join(x))
df[['name','text','month']].drop_duplicates()

Kod di atas menghasilkan bingkai data dengan hasil yang diingini:

    name         text  month
0  name1       hej,du     11
2  name1        aj,oj     12
4  name2     fin,katt     11
6  name2  mycket,lite     12

Penyelesaian Alternatif

Daripada menggunakan transform( ), anda juga boleh menggunakan apply() dan kemudian reset_index() untuk mencapai hasil yang sama. Kod yang dikemas kini ialah:

df.groupby(['name','month'])['text'].apply(','.join).reset_index()

Versi ringkas ini menghapuskan ungkapan lambda dan menyediakan penyelesaian yang lebih ringkas.

Atas ialah kandungan terperinci Bagaimana untuk Menggabungkan Rentetan daripada Berbilang Baris dalam Panda Menggunakan Groupby?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn