dinsdag 17 juli 2018

Bepaal voorziensoort combinaties

@author: wagenerj


Bepaal hoevaak een bepaalde combinatie van voorzieningsoortenin voorkomt bij een client
en sorteer naar voorkomens
"""

import pandas as pd
#factuurlines = pd.read_csv("C:\\Users\\wagenerj\\Documents\\MyPython\\Data\\grip\\df_debet_geschoond.csv",sep=";",engine='python')
jeugdlines= pd.read_csv("\\\\basis.lan\\amsterdam\\IVSociaal\\17.BusinessIntelligence\\09.InterneProjecten\\ZichtEnGripOpSociaal\\Output bestanden\\met vzcode en leveringsvorm\\GRIP_Jeugd_2017_19062018_inclGI.csv",sep=",",engine='python')


jeugdlines["teller"]=1
jeugdlines

df_bsn_vzsoort=pd.pivot_table(jeugdlines,index=("C_CLIENT"),columns=("N_SRT_VOORZ"),values="teller",aggfunc="count")
df_bsn_vzsoort

#zet alle vxsoorten groter dan 1 op 1
df_bsn_vzsoort=df_bsn_vzsoort>0
df_bsn_vzsoort=df_bsn_vzsoort*1

#
vzsoort_list=df_bsn_vzsoort.columns


df_bsn_vzsoort['aantal_voorz']=df_bsn_vzsoort[:].sum(axis=1)
#filter clienten met slechts 1 voorziening eruit
df_bsn_vzcombi=df_bsn_vzsoort[df_bsn_vzsoort['aantal_voorz']>1]
#haal nu het veld aantal_voorz eruit.
#list comprehension in python: Gebruik om het veld teller te verwijderen
juistKolommen = [k for k in df_bsn_vzcombi.columns if k is not 'aantal_voorz']
df_bsn_vzcombi=df_bsn_vzcombi[juistKolommen]

#voeg nieuw veld toe waarbij alle 1 en 0 achter elkaar geplakt worden
df_bsn_vzcombi['voorz_combi']=df_bsn_vzcombi[:].astype(str).apply('-'.join, axis=1)

df_bsn_vzcombi=df_bsn_vzcombi.reset_index()

df_bsn_vzcombi1=df_bsn_vzcombi.groupby(by="voorz_combi")["C_CLIENT"].count()
df_bsn_vzcombi2 = df_bsn_vzcombi1.reset_index()

df_bsn_vzcombi2=df_bsn_vzcombi2.sort_values(by="C_CLIENT",ascending=False)
df_bsn_vzcombi2 = df_bsn_vzcombi2.reset_index()

#manier 1
mycodes=[]
for index,row in df_bsn_vzcombi2.iterrows():
    code_list=row["voorz_combi"].split("-")
    codering=[]
    for num,code in enumerate(code_list, start=0):
        #print(vzsoort_list[num],code)
        if code=="1" : codering.append(vzsoort_list[num])
    mycodes.append(codering)
df_bsn_vzcombi2["mycodes"]=mycodes

#manier 2 de meest efficiente
def hercoderen(waarde, lijst):
    code_list=waarde.split("-")
    codering=[]
    for num,code in enumerate(code_list, start=0):
        #print(vzsoort_list[num],code)
        if code=="1" : codering.append(lijst[num])   
    return codering

mycodes=[]
df_bsn_vzcombi2["mycodes2"]=df_bsn_vzcombi2["voorz_combi"].apply(hercoderen, args=(vzsoort_list,))

Geen opmerkingen:

Een reactie posten

Datums bepalen adhv begin en einddatum in Dataframe

Voorbeeld op losse velden  ####################################################################### # import necessary packages from datetime...