生成包含模态值的新列

Generating new column containing modal value

我有以下数据框:

skus = [1, 1, 1, 2, 2]
prices = [10.99, 10.99, 11.50, 9.99, 9.99]
data = dict(skus=skus, prices=prices)
df = pd.DataFrame(data, columns=data.keys())

如何创建另一列 prices_mode,如下所示:

   skus  prices  prices_modal
0     1   10.99         10.99
1     1   10.99         10.99
2     1   11.50         10.99
3     2    9.99          9.99
4     2    9.99          9.99

即这是每个唯一 sku 值的价格模式。

方法一

使用 groupbytransformpd.Series.mode

df['prices_modal'] = df.groupby('skus')['prices'].transform(lambda x: pd.Series.mode(x)[0])

   skus  prices  prices_modal
0     1   10.99         10.99
1     1   10.99         10.99
2     1   11.50         10.99
3     2    9.99          9.99
4     2    9.99          9.99

方法二

使用statistics.mode

from statistics import mode

df['prices_modal'] = df.groupby('skus')['prices'].transform(mode)

   skus  prices  prices_modal
0     1   10.99         10.99
1     1   10.99         10.99
2     1   11.50         10.99
3     2    9.99          9.99
4     2    9.99          9.99