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

如何基于Pandas分组索引匹配获取对应中位数金额?

解决多层索引DataFrame的取值问题

嘿,针对你这个多层索引DataFrame的需求,其实有更直接高效的方法,不用绕弯子循环找count,我给你两种方案:

方案一:直接通过多层索引访问(推荐)

因为你的train_frame已经把['property', 'month', 'date', 'room']设为多层索引,Pandas的.loc方法完美支持直接传入索引元组来定位行,这是最简洁高效的方式。

假设你传入的匹配列表是target = [prop_val, month_val, date_val, room_val],只需要把它转成元组(或者直接用列表也可以,Pandas会自动识别),然后直接取值:

# 假设传入的目标匹配值是 ['BuildingA', 5, 20, 'Room102']
target = ['BuildingA', 5, 20, 'Room102']
# 直接通过多层索引定位对应的中位数金额
median_amount = train_frame.loc[tuple(target), 'amount']
# 因为你的DataFrame只有amount一列,也可以简化成:
median_amount = train_frame.loc[tuple(target)]

注意:要保证传入的每个值的类型和索引层的类型完全匹配,比如month如果是整数类型,你就不能传字符串'5',必须传整数5,否则会找不到对应行。

方案二:基于你之前的思路优化(不推荐,仅作参考)

如果你还是想沿用把索引存入列表的思路,也可以通过找到匹配索引的位置,再用.iloc取值:

# 把所有多层索引转成列表
big_list = train_frame.index.tolist()
# 目标匹配的索引元组
target_tuple = ('BuildingA', 5, 20, 'Room102')
# 找到目标索引在列表中的位置
try:
    idx = big_list.index(target_tuple)
    # 通过位置获取对应的金额
    median_amount = train_frame.iloc[idx]['amount']
except ValueError:
    # 处理找不到匹配项的情况
    print("没有找到匹配的索引")

不过这种方法在数据量大的时候效率很低,因为list.index()是线性查找,远不如.loc的哈希查找快,所以更推荐方案一。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.14 08:16:33