我有一个大约 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]
