@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,))
dinsdag 17 juli 2018
maandag 16 juli 2018
Eigen functie toepassen op dataframe
Het is mogelijk om op alle waarden in een kolom in een dataframe een eigen functie toe te passen.
def mijnfunctie(waarde):
code_list=waarde.split("-")
return code_list
df_bsn_vzcombi2["mycodes2"]=df_bsn_vzcombi2["voorz_combi"].apply(mijnfunctie)
>>>>> hierbij wordt de waarde in df_bsn_vzcombi2["voorz_combi"] doorgegeven als eerste argument aan de functie
>>>>> Je kan ook andere argumenten doorgegeven aan de functie via args
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,))
dinsdag 10 juli 2018
Panda truukjes: pivoteren dataframe velden verwijderen of volgorde aanpassen
handig https://www.shanelynn.ie/summarising-aggregation-and-grouping-data-in-python-pandas/
import pandas
factuurlines = pd.read_csv("df_debet_geschoond.csv",sep=";",engine='python' )
factuurlines["BEDR_FACT__GOEDGEKEURD"].sum()
a=factuurlines.groupby('C_CLIENT')
pd.pivot_table(factuurlines,index="N_PRODUCTCODE",values="BEDR_FACT__GOEDGEKEURD")
pd.pivot_table(factuurlines,index=("C_CLIENT","N_SRT_VOORZ","C_VOORZ","N_PRODUCTCODE"),values="BEDR_FACT__GOEDGEKEURD")
df_pivot1=pd.pivot_table(factuurlines,index=("C_CLIENT","N_SRT_VOORZ","C_VOORZ","N_PRODUCTCODE"),values="BEDR_FACT__GOEDGEKEURD",aggfunc="sum",margins = True, margins_name= 'Total count')
# altijd de pivot resetten: dataframe weer normaliseren.de velden waarop gegroepeerd wordt zijn als index concated.
df_pivot1=df_pivot1.reset_index()
df_pivot1['iets'] = df_pivot1['groterDan1000']*10
df_bsn=pd.pivot_table(factuurlines,index=("C_CLIENT"),columns="C_VOORZ",values="ORGANISATIE",aggfunc="count")
df_bsn = df_bsn[juistKolommen]
df_bsn=df_bsn*1
df_bsn['teller']=df_bsn[:].sum(axis=1)
df_pivot1.to_csv("produktenJeugd2017.csv",sep= ";",decimal= ",");
import pandas
factuurlines = pd.read_csv("df_debet_geschoond.csv",sep=";",engine='python' )
factuurlines["BEDR_FACT__GOEDGEKEURD"].sum()
a=factuurlines.groupby('C_CLIENT')
pd.pivot_table(factuurlines,index="N_PRODUCTCODE",values="BEDR_FACT__GOEDGEKEURD")
pd.pivot_table(factuurlines,index=("C_CLIENT","N_SRT_VOORZ","C_VOORZ","N_PRODUCTCODE"),values="BEDR_FACT__GOEDGEKEURD")
df_pivot1=pd.pivot_table(factuurlines,index=("C_CLIENT","N_SRT_VOORZ","C_VOORZ","N_PRODUCTCODE"),values="BEDR_FACT__GOEDGEKEURD",aggfunc="sum",margins = True, margins_name= 'Total count')
# altijd de pivot resetten: dataframe weer normaliseren.de velden waarop gegroepeerd wordt zijn als index concated.
df_pivot1=df_pivot1.reset_index()
df_pivot1['iets'] = df_pivot1['groterDan1000']*10
df_bsn=pd.pivot_table(factuurlines,index=("C_CLIENT"),columns="C_VOORZ",values="ORGANISATIE",aggfunc="count")
nieuw veld aan begin dataframe toevoegen
mycol=pd.Index(['VALID_BSN']).append(dflookup1.columns)#list comprehension in python: Gebruik om het veld teller te verwijderen
juistKolommen = [k for k in df_bsn.columns if k is not 'teller']df_bsn = df_bsn[juistKolommen]
# Hoe tel ik per bsn het aantal unieke produkten
df_bsn=df_bsn>0df_bsn=df_bsn*1
df_bsn['teller']=df_bsn[:].sum(axis=1)
df_pivot1.to_csv("produktenJeugd2017.csv",sep= ";",decimal= ",");
pandas dataframe and CSV
Importeer CSV naar Dataframe
import pandasfactuurlines = pd.read_csv("df_debet_geschoond.csv",sep=";",engine='python' )
toelichting engine=python
“Error tokenising data. C error: EOF inside string starting at line”.
There was an erroneous character about 5000 lines into the CSV file that prevented the Pandas CSV parser from reading the entire file. Excel had no problems opening the file, and no amount of saving/re-saving/changing encodings was working. Manually removing the offending line worked, but ultimately, another character 6000 lines further into the file caused the same issue.
The solution was to use the parameter engine=’python’ in the read_csv function call. The Pandas CSV parser can use two different “engines” to parse CSV file – Python or C (default).
Exporteer Daframe naar CSV
df_debet_geschoond.to_csv("df_debet_geschoond.csv", sep=";")woensdag 4 juli 2018
PYTHON CODE
lijst = []
lst_credit_not_found = []
for i in range( int(df_credit['SRLNO'].max() +1)):
df_credit_group = df_credit[df_credit['SRLNO']==i]
df_debet_tmp=df_debet[~df_debet.ID_FACTUURREGEL.isin(lijst)]
for index, row in df_credit_group.iterrows():
rows,columns =df_debet_tmp[df_debet_tmp["C_FACTUUR"]==row["C_FACTUUR"]].shape
if rows<1:
lst_credit_not_found.append(df_debet_tmp[df_debet_tmp["C_FACTUUR"]==row["C_FACTUUR"]].iloc[0]["ID_FACTUURREGEL"])
else:
lijst.append(df_debet_tmp[df_debet_tmp["C_FACTUUR"]==row["C_FACTUUR"]].iloc[0]["ID_FACTUURREGEL"])
'werkend
lijst = []
for i in range( int(df_credit['SRLNO'].max() +1)):
df_credit_group = df_credit[df_credit['SRLNO']==i]
df_debet_tmp=df_debet[~df_debet.ID_FACTUURREGEL.isin(lijst)]
for index, row in df_credit_group.iterrows():
lijst.append(df_debet_tmp[df_debet_tmp["C_FACTUUR"]==row["C_FACTUUR"]].iloc[0]["ID_FACTUURREGEL"])
lst_credit_not_found = []
for i in range( int(df_credit['SRLNO'].max() +1)):
df_credit_group = df_credit[df_credit['SRLNO']==i]
df_debet_tmp=df_debet[~df_debet.ID_FACTUURREGEL.isin(lijst)]
for index, row in df_credit_group.iterrows():
rows,columns =df_debet_tmp[df_debet_tmp["C_FACTUUR"]==row["C_FACTUUR"]].shape
if rows<1:
lst_credit_not_found.append(df_debet_tmp[df_debet_tmp["C_FACTUUR"]==row["C_FACTUUR"]].iloc[0]["ID_FACTUURREGEL"])
else:
lijst.append(df_debet_tmp[df_debet_tmp["C_FACTUUR"]==row["C_FACTUUR"]].iloc[0]["ID_FACTUURREGEL"])
'werkend
lijst = []
for i in range( int(df_credit['SRLNO'].max() +1)):
df_credit_group = df_credit[df_credit['SRLNO']==i]
df_debet_tmp=df_debet[~df_debet.ID_FACTUURREGEL.isin(lijst)]
for index, row in df_credit_group.iterrows():
lijst.append(df_debet_tmp[df_debet_tmp["C_FACTUUR"]==row["C_FACTUUR"]].iloc[0]["ID_FACTUURREGEL"])
Abonneren op:
Posts (Atom)
Datums bepalen adhv begin en einddatum in Dataframe
Voorbeeld op losse velden ####################################################################### # import necessary packages from datetime...
-
value_counts geef per waarde het aantal voorkomens in een bepaalde df_iris.species.value_counts() versicolor 50 setosa 50 v...
-
import textfiles # Open a file: file file = open('opa.txt','r') # Print it print(file.read()) # Check whether file ...
-
scikit-learn, a standard library for machine learning in Python. It describes itself like this: Machine Learning in Python •Simple and...