Saya ingin menggabungkan beberapa string dalam dataframe berdasarkan groupedby in Pandas.
Ini adalah kode saya sejauh ini:
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)
Saya ingin hasil akhirnya terlihat seperti ini:
Saya tidak mengerti bagaimana saya bisa menggunakan groupby dan menerapkan semacam penggabungan string di kolom "teks". Setiap bantuan dihargai!
sumber
pandas < 1.0
,.drop_duplicates()
mengabaikan indeks, yang mungkin memberikan hasil yang tidak diharapkan. Anda dapat menghindari ini dengan menggunakan.agg(lambda x: ','.join(x))
sebagai pengganti.transform().drop_duplicates()
.drop_duplicates()
mungkin tidak berfungsi jika Anda tidak menyertakan parameterdrop_duplicates(inplace=True)
atau hanya menulis ulang baris kode sebagaidf = df[['name','text','month']].drop_duplicates()
kita bisa mengelompokkan berdasarkan kolom 'nama' dan 'bulan', lalu memanggil fungsi agg () dari objek DataFrame Panda.
Fungsionalitas agregasi yang disediakan oleh fungsi agg () memungkinkan beberapa statistik dihitung per grup dalam satu penghitungan.
df.groupby(['name', 'month'], as_index = False).agg({'text': ' '.join})
sumber
Jawaban oleh EdChum memberi Anda banyak fleksibilitas, tetapi jika Anda hanya ingin menggabungkan string ke dalam kolom objek daftar, Anda juga dapat:
output_series = df.groupby(['name','month'])['text'].apply(list)
sumber
Bagi saya solusi di atas sudah dekat tetapi menambahkan beberapa / n yang tidak diinginkan dan dtype: object, jadi inilah versi yang dimodifikasi:
df.groupby(['name', 'month'])['text'].apply(lambda text: ''.join(text.to_string(index=False))).str.replace('(\\n)', '').reset_index()
sumber