Halo Saya memiliki dataframe berikut.
Group Size
Short Small
Short Small
Moderate Medium
Moderate Small
Tall Large
Saya ingin menghitung frekuensi berapa kali baris yang sama muncul di dataframe.
Group Size Time
Short Small 2
Moderate Medium 1
Moderate Small 1
Tall Large 1
Jawaban:
Anda dapat menggunakan groupby's
size
:In [11]: df.groupby(["Group", "Size"]).size() Out[11]: Group Size Moderate Medium 1 Small 1 Short Small 2 Tall Large 1 dtype: int64 In [12]: df.groupby(["Group", "Size"]).size().reset_index(name="Time") Out[12]: Group Size Time 0 Moderate Medium 1 1 Moderate Small 1 2 Short Small 2 3 Tall Large 1
sumber
.size()
akan mengembalikan Seri sementara.size().reset_index(name="Time")
adalah DataFrame. Terima kasih Andy.df.groupby(by=["Group", "Size"], as_index=False).size()
hanyaPerbarui setelah pandas 1.1
value_counts
sekarang menerima beberapa kolomdf.value_counts(["Group", "Size"])
Anda juga bisa mencoba
pd.crosstab()
Group Size Short Small Short Small Moderate Medium Moderate Small Tall Large pd.crosstab(df.Group,df.Size) Size Large Medium Small Group Moderate 0 1 1 Short 0 0 2 Tall 1 0 0
EDIT: Untuk mendapatkan hasil Anda
pd.crosstab(df.Group,df.Size).replace(0,np.nan).\ stack().reset_index().rename(columns={0:'Time'}) Out[591]: Group Size Time 0 Moderate Medium 1.0 1 Moderate Small 1.0 2 Short Small 2.0 3 Tall Large 1.0
sumber
margins=True
untuk mendapatkan jumlah marjinal!Kemungkinan lain menggunakan
.pivot_table()
danaggfunc='size'
df_solution = df.pivot_table(index=['Group','Size'], aggfunc='size')
sumber