带 groupby 和频率的中位数

Median with groupby and frequency

假设我有这个名为 'market'

的数据框
market = pd.DataFrame({'product': ['milk', 'milk', 'milk', 'bread', 'bread'], 
                   'frequency': [4,2,6,3,5],
                  'price_each': [3,4,5,10,8]})
market

这将是

product frequency price_each
milk    4         3
milk    2         4
milk    6         5
bread   3         10
bread   5         8

如何通过groupby产品正确计算这个中位数及其使用频率?

我做了什么(但得到了错误的结果)

market.groupby('product')['price_each'].median()

真实的和预期的结果是

product   median of price each
milk      4.5       
bread     8       

使用 numpy.repeatnumpy.median:

new_df = market.groupby('product').apply(lambda x: np.median(np.repeat(x['price_each'], x['frequency'])))
print(new_df)

输出:

product
bread    8.0
milk     4.5
dtype: float64