Saya memiliki dataframe seperti ini:
A B C
0 1 0.749065 This
1 2 0.301084 is
2 3 0.463468 a
3 4 0.643961 random
4 1 0.866521 string
5 2 0.120737 !
Panggilan
In [10]: print df.groupby("A")["B"].sum()
akan kembali
A
1 1.615586
2 0.421821
3 0.463468
4 0.643961
Sekarang saya ingin melakukan "hal yang sama" untuk kolom "C". Karena kolom itu berisi string, sum () tidak berfungsi (meskipun Anda mungkin berpikir bahwa itu akan menggabungkan string). Apa yang benar-benar ingin saya lihat adalah daftar atau kumpulan string untuk setiap kelompok, yaitu
A
1 {This, string}
2 {is, !}
3 {a}
4 {random}
Saya telah mencoba menemukan cara untuk melakukan ini.
Series.unique () ( http://pandas.pydata.org/pandas-docs/stable/generated/pandas.Series.unique.html ) tidak berfungsi, meskipun
df.groupby("A")["B"]
adalah
pandas.core.groupby.SeriesGroupBy object
jadi saya berharap metode Seri apa pun akan berhasil. Ada ide?
apply
danlambda
s. Saya datang ke sini bertanya-tanya mengapapandas
sebenarnya concats dan tidak mengembalikan kesalahan pada string penjumlahan.Anda dapat menggunakan
apply
metode ini untuk menerapkan fungsi arbitrer ke data yang dikelompokkan. Jadi jika Anda menginginkan satu set, terapkanset
. Jika Anda menginginkan daftar, terapkanlist
.Jika Anda menginginkan sesuatu yang lain, cukup tulis fungsi yang melakukan apa yang Anda inginkan dan kemudian
apply
itu.sumber
.reset_index()
.Anda mungkin dapat menggunakan fungsi
aggregate
(atauagg
) untuk menggabungkan nilai. (Kode belum teruji)sumber
Anda bisa mencoba ini:
sumber
solusi sederhana adalah:
sumber
df.groupby(['A','B']).c.unique().apply(lambda x: ';'.join(x)).reset_index()
Agregasi bernama dengan
pandas >= 0.25.0
Sejak pandas versi 0.25.0 kami telah menamai agregasi di mana kami dapat mengelompokkan, menggabungkan, dan pada saat yang sama menetapkan nama baru ke kolom kami. Dengan cara ini kita tidak akan mendapatkan kolom MultiIndex, dan nama kolom lebih masuk akal mengingat data di dalamnya:
mengumpulkan dan mendapatkan daftar string
menggabungkan dan menggabungkan string
sumber
Jika Anda ingin menimpa kolom B di dataframe, ini seharusnya berfungsi:
sumber
Mengikuti jawaban bagus @ Erfan, sebagian besar waktu dalam analisis nilai agregat Anda menginginkan kombinasi unik yang mungkin dari nilai karakter yang ada ini:
sumber