vrijdag 13 december 2019

Voorbeeld Overloop datums binnen een groep


check overloop datums binnen een Groep

Uitgangspunt is dataframe df1 met begin en einddatum. Kort gezegd gaan we eerst een datetimeindex met alle datums in de datum_range opbouwen. Deze range kunnen we ook kleiner maken door spelingsparameters aan te passen

code:

spelingrechts=31
spelinglinks=31

#Genereer per regel alle lijst met alle datumvelden op
df1['myrange']=df1.apply(lambda x: pd.date_range(x['BEGIN_DATUM']+timedelta(days=spelinglinks),x['EIND_DATUM']-timedelta(days=spelingrechts), freq='D'),axis=1)


#Convert Datetimeindex to Index using specified date_format.
df1['myrange']=df1['myrange'].map(lambda x: x.strftime("%Y/%m/%d"))

df1=df1.sort_values(by='BEGIN_DATUM')


def maakPeriodesPerBSN(bsn,dfx):
    global myfile
    # Maak een set
    dfx['myrange']=dfx.apply(lambda x: set(x['myrange']),axis=1)
 #   ==> ga bepalen er een join is tussen de myrange records van de bsn
    geenoverlap=True
    lstbsnoverlap=[]  
    for i in range(len(dfx)-1):
        geenoverlap=dfx['myrange'].iloc[i].isdisjoint(dfx['myrange'].iloc[i+1]) &  geenoverlap
       
    if geenoverlap == False:
        f= open(myfile,"a+")
        f.write(str(bsn) + '\n')
        f.close
       
 

hoofdprogramma
       
myfile=r'C:\Users\wagene002\Documents\Python\grip\LLVverwerkenInput\guru99.txt'
f= open(myfile,"w+")  
f.seek(0)
f.truncate()
f.write('New run with spelinglinks/spelingrechts ==>' + str(spelinglinks) + '/' + str(spelingrechts) + '\n')
f.close()

df1.groupby(['BSN']).apply(lambda x: maakPeriodesPerBSN(x.name,x))
df1.groupby(['BSN','CODE_VOORZIENING']).apply(lambda x: maakPeriodesPerBSN(x.name,x))

Geen opmerkingen:

Een reactie posten