如何为Pandas DataFrame的distances列分配离散权重?
为DataFrame根据距离区间分配权重的最优实现方法
你需要为包含distances列的DataFrame按指定区间规则分配对应权重,以下是两种高效实现方案,其中pd.cut()是最适配这类区间划分场景的最优方法。
方法一:使用pd.cut()(最优推荐)
pd.cut()专门用于将连续数值划分为离散区间,代码简洁且性能高效,完美匹配你的区间权重分配需求:
- 先构造示例DataFrame:
import pandas as pd df = pd.DataFrame({ 'sample': ['First', 'Second', 'Third'], 'distances': [3234, 465, 1200] })
- 定义区间边界和对应权重,通过
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
相关产品推荐
相关产品推荐

