Skip to main content
 首页 » 编程设计

python之将数字范围转换为顺序范围

2025年05月04日9JustinYoung

我有一个大约 9000 的数据集,领土范围的形式为 [1-5,10-99,100-115] 我想将数据和行扩展为提供的数据集中的形式。

我的第一个想法可能是遍历“Terri”系列并通过 pd.series(range(i,100)) 运行它,但这不会产生以下输出。

感谢帮助。

import pandas as pd 
d={'Peril':['Fire','Wind'],'Terri':[1-5,6-10],'Premium':[100,200]} 
output={'Peril':['Fire','Fire','Fire','Fire','Fire','Wind','Wind','Wind','Wind','Wind'],'Terri':[1,2,3,4,5,6,7,8,9,10],'Premium':[100,100,100,100,100,200,200,200,200,200]} 
df=pd.DataFrame(data=d) 
expected_output=pd.DataFrame(data=output) 

请您参考如下方法:

使用几个帮助列表理解,然后使用 pandas.index.repeat , DataFrame.assign和 numpy.hstack :

import numpy as np 
import pandas as pd 
 
ranges = [np.arange(s, e+1) for s, e in [list(map(int, x)) for x in df.Terri.str.split('-')]] 
lens = [len(x) for x in ranges] 
 
df_new = df.loc[df.index.repeat(lens)].assign(Terri=np.hstack(ranges)) 

[输出]

  Peril  Terri  Premium 
0  Fire      1      100 
0  Fire      2      100 
0  Fire      3      100 
0  Fire      4      100 
0  Fire      5      100 
1  Wind      6      200 
1  Wind      7      200 
1  Wind      8      200 
1  Wind      9      200 
1  Wind     10      200 

作为引用,ranges 看起来像:

[array([1, 2, 3, 4, 5]), array([ 6,  7,  8,  9, 10])] 

lens 看起来像:

[5, 5]