You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Pandas中找到Units第50百分位数对应的Price?

找到Units列第50百分位数对应Price值的方法

首先还原你提供的DataFrame:

CategoryUnitsPrice
a43.5
a54.5
a37.8
a811.5
a115.5
b52.1
b64.5
b36.5

下面分三种常见场景给出实现方法:

场景1:先求Units的50百分位数,再匹配对应Price

50百分位数即中位数,Pandas默认用线性插值计算(偶数个数据时取中间两数的平均值),如果需要匹配实际存在的Units值,可改用最近插值方式,代码如下:

import pandas as pd

# 构造DataFrame
data = {
    'Category': ['a', 'a', 'a', 'a', 'a', 'b', 'b', 'b'],
    'Units': [4, 5, 3, 8, 1, 5, 6, 3],
    'Price': [3.5, 4.5, 7.8, 11.5, 15.5, 2.1, 4.5, 6.5]
}
df = pd.DataFrame(data)

# 计算Units列的50百分位数(线性插值)
units_median = df['Units'].quantile(0.5)
# 计算最近的实际存在的Units中位数
units_median_nearest = df['Units'].quantile(0.5, interpolation='nearest')

# 筛选对应Price:针对插值得到的非实际值用近似匹配
matching_prices = df[df['Units'].between(units_median - 0.01, units_median + 0.01)]['Price']
# 针对实际存在的Units值直接筛选
matching_prices_nearest = df[df['Units'] == units_median_nearest]['Price']

执行结果:

  • units_median 为 4.5(线性插值结果),无完全匹配的Units,matching_prices 为空;
  • units_median_nearest 为 5,对应的Price为 [4.5, 2.1]。

场景2:按Units排序后,取50百分位位置的Price

如果需求是按Units排序后,取中位数位置对应行的Price,代码如下:

# 按Units升序排序
df_sorted = df.sort_values('Units').reset_index(drop=True)
# 计算中位数位置(向下取整)
median_pos = int(len(df_sorted) * 0.5)
# 获取对应Price
price_at_median_pos = df_sorted.loc[median_pos, 'Price']

排序后的前5行数据:

CategoryUnitsPrice
a115.5
a37.8
b36.5
a43.5
a54.5

median_pos 为 4,对应的Price是 4.5。

场景3:按Category分组计算

如果需要每个分类下,各自Units的50百分位数对应Price,可使用分组处理:

def get_median_price(group):
    sorted_group = group.sort_values('Units').reset_index(drop=True)
    pos = int(len(sorted_group) * 0.5)
    return sorted_group.loc[pos, 'Price']

grouped_result = df.groupby('Category').apply(get_median_price)

最终分组结果:

Category
a    7.8
b    2.1
dtype: float64

内容的提问来源于stack exchange,提问作者SOUMYABRATA RAKSHIT

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.16 11:49:55