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

如何为Pandas DataFrame的distances列分配离散权重?

为DataFrame根据距离区间分配权重的最优实现方法

你需要为包含distances列的DataFrame按指定区间规则分配对应权重,以下是两种高效实现方案,其中pd.cut()是最适配这类区间划分场景的最优方法。

方法一:使用pd.cut()(最优推荐)

pd.cut()专门用于将连续数值划分为离散区间,代码简洁且性能高效,完美匹配你的区间权重分配需求:

  1. 先构造示例DataFrame:
import pandas as pd

df = pd.DataFrame({
    'sample': ['First', 'Second', 'Third'],
    'distances': [3234, 465, 1200]
})
  1. 定义区间边界和对应权重,通过pd.cut()生成权重列:
# 定义区间边界(左闭右开,完全匹配规则)
bins = [0, 1000, 2000, 3000, float('inf')]
# 对应区间的权重,顺序与bins一一对应
weights = [2, 1, 0.5, 0.25]

# 生成权重列,right=False指定区间左闭右开,精准匹配规则
df['weights'] = pd.cut(df['distances'], bins=bins, labels=weights, right=False)

执行后,df['weights']的结果为[0.25, 2, 1],完全符合预期。

方法二:使用np.select()(灵活备选)

如果后续需要调整更复杂的非连续条件,np.select()是更灵活的选择,它可以根据多组条件映射对应值:

import numpy as np
import pandas as pd

df = pd.DataFrame({
    'sample': ['First', 'Second', 'Third'],
    'distances': [3234, 465, 1200]
})

# 定义条件列表,顺序与权重列表对应
conditions = [
    df['distances'] >= 3000,
    (df['distances'] >= 2000) & (df['distances'] < 3000),
    (df['distances'] >= 1000) & (df['distances'] < 2000),
    df['distances'] < 1000
]
# 对应条件的权重
choices = [0.25, 0.5, 1, 2]

df['weights'] = np.select(conditions, choices)

方案对比

  • pd.cut():代码更简洁,针对区间划分场景性能更优,是当前需求的最优选择。
  • np.select():灵活性更强,适合条件复杂、非连续区间的场景,但代码量略多。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.14 05:55:23