我正在乱丢Pandas中的数据集,其中包含两个类别列,以及每行的下限和上限。两个类别列中的值组合不是唯一的。
下限和上限形成一个区间,对于相同的类别列值组合,它可能会重叠。我想将给定的类别值组合的重叠间隔减少到非重叠区间。
我自己的解决方案可以在下面看到,但我想知道是否有人知道更好的方法来做到性能明智。谢谢!
import pandas as pd
import numpy as np
#Define data
df = pd.DataFrame({'CatA':['A','B']*8,'CatB':['C','C','D','D']*4,
'Lower':[17,132,81,4,2,67,69,4,39,13,0,35,37,164,57,180],
'Upper':[85,190,161,38,191,69,183,62,70,30,89,155,134,168,110,187]})
#Identify overlapping intervals
tmp = df.sort_values(['CatA','CatB','Lower']).reset_index()
tmp.loc[0,'InPrev'] = False
tmp.loc[1:,'InPrev'] = tmp.loc[1:,'Lower']>tmp.loc[:14,'Upper']
tmp['GrpCount'] = tmp.groupby(['CatA','CatB'])['InPrev'].cumsum()
#Compute extremes of intervals
red_df = tmp.groupby(['CatA','CatB','GrpCount'])\
.agg({'Lower':np.min,'Upper':np.max})\
.reset_index()[['CatA','CatB','Lower','Upper']]