import pandas as pd
# 假设df是一个包含ID和分类列的数据框
grouped = df.groupby('ID')['分类'].value_counts().unstack().fillna(0)
multinomial_cols = pd.DataFrame()
for col in grouped.columns:
n = grouped[col].sum()
multinomial_cols[col] = grouped[col] / n
其中,每个多项式分布列的计算公式为:
$$P_i = \frac{N_i}{\sum_{j} N_j}$$
其中$P_i$为第i类的概率,$N_i$为第i类出现的次数。
result = df.merge(multinomial_cols, on='ID')