首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >基于80个区间条件使用pd.cut()和np.select( )条件列表的Python

基于80个区间条件使用pd.cut()和np.select( )条件列表的Python
EN

Stack Overflow用户
提问于 2021-01-03 22:32:48
回答 1查看 355关注 0票数 0
代码语言:javascript
运行
复制
import pandas as pd

data = pd.DataFrame({'ratio' : [0.25,0.20,0.45,0.10],
        'range': ['1-25','26-50','51-75','76-100']})
degree = pd.DataFrame({'degree':[1,2,5,10,15,13,25,24,26,27,35,40,44,50,73, 80]})

我需要添加一个新的列,基于作为范围列出的间隔条件。例如,如果自由度=1,属于1-25的范围,那么新列应该是0.25。如果度数= 24,范围为26-50,则新列应为0.20。

我使用下面的代码,首先将度划分为间隔,然后使用np.select

代码语言:javascript
运行
复制
degree_bin = pd.interval_range(start = 1, end = 101, freq = 25, closed = 'left')
degree['bin'] = pd.cut(degree['degree'], bins = degree_bin)
degree['bin'] = degree['bin'].astype('category') # change into 'category' var

choicelist = data['ratio'].tolist()
condlist  = [degree['bin'] == pd.Interval(1,26,closed = 'left'),
             degree['bin'] == pd.Interval(26,51,closed = 'left'),
             degree['bin'] == pd.Interval(51,76,closed = 'left'),
             degree['bin'] == pd.Interval(76,101,closed = 'left'),
            ]
degree['f'] = np.select(condlist, choicelist)

但我有超过80个间隔,从1到2000年,我的整个数据集的频率为25。我怎样才能更有效地写出吊唁表呢?我可能需要调整使用pd.cut的方式,以便bin生成的度‘bin’与数据“范围”相匹配。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-01-03 23:31:59

我会用merge_asof

  1. 单独对破折号
  2. 将值类型更改为整数
  3. 确保列已排序
  4. 使用merge_asof

代码语言:javascript
运行
复制
import pandas as pd

data = pd.DataFrame ({'ratio' : [0.25,0.20,0.45,0.10],
        'range': ['1-25','26-50','51-75','76-100']})
degree = pd.DataFrame ({'degree':[1,2,5,10,15,13,25,24,26,27,35,40,44,50,73, 80]})

min_max[['degree', 'max']] = data['range'].str.split("-", n=1, expand = True)
data['degree'] = min_max['degree']

data['degree'] = data['degree'].astype(int)
degree['degree'] = degree['degree'].astype(int)
degree = degree.sort_values(by='degree')

pd.merge_asof(degree, data, on="degree", direction="backward")

结果:

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/65555617

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档