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 passencode:
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