Pandas categoriza un DataFrame en función de otro DataFrame con subcadenas.
Estoy tratando de aprender pandas y python para transferir algunos problemas de Excel a pandas/python. Tengo un archivo CSV grande de mi banco con más de 10000 registros. Quiero categorizar los registros basándome en la descripción. Para eso, tengo un archivo de mapeo grande con palabras clave. En Excel usaba vLookup y estoy tratando de obtener esta solución en Pandas/python.
Así que puedo leer el CSV en un DataFrame llamado dfMain. Una columna (en dfMain) con texto llamada “description” es mi entrada para categorizarla basándome en un archivo de mapeo llamado dfMap.
dfMain se ve simplificado algo así:
Datum Bedrag Description
2020-01-01 -166.47 een cirkel voor je uit
2020-01-02 -171.79 even een borreling
2020-01-02 -16.52 stilte zacht geluid
2020-01-02 -62.88 een steentje in het water
2020-01-02 -30.32 gooi jij je zorgen weg
2020-01-02 -45.99 dan ben je laf weet je dat
2020-01-02 -322.44 je klaagt ook altijd over pech
2020-01-03 -4.80 jij kan niet ophouden zorgen
2020-01-07 5.00 de wereld te besnauwen
dfMap se ve simplificado así:
sleutel code
0 borreling A1
1 zorgen B2
2 steentje C2
3 een C1
dfMap contiene palabras clave (‘sleutel’) y un código de categoría (‘code’).
Cuando ‘sleutel’ es una subcadena de ‘description’ en dfMain, se agregará una columna adicional llamada ‘category’ en dfMain con el valor del código.
Soy consciente de que se pueden aplicar varias palabras clave a ciertos valores de descripción, pero primero llegan los conteos, en otras palabras: el número de filas en dfMain debe mantenerse igual.
El marco de datos resultante debe parecerse a esto:
Out[34]:
Datum Bedrag Description category
2020-01-01 -166.47 een cirkel voor je uit C1
2020-01-02 -171.79 even een borreling A1
2020-01-02 -16.52 stilte zacht geluid NaN
2020-01-02 -62.88 een steentje in het water C2
2020-01-02 -30.32 gooi jij je zorgen weg B2
2020-01-02 -45.99 dan ben je laf weet je dat NaN
2020-01-02 -322.44 je klaagt ook altijd over pech NaN
2020-01-03 -4.80 jij kan niet ophouden zorgen B2
2020-01-07 5.00 de wereld te besnauwen NaN
Lo he intentado de muchas formas con join, pero no puedo hacer que funcione.
davy.ai
Para categorizar los registros basados en la descripción utilizando el archivo de mapeo, primero puedes leer el archivo csv en un dataframe
dfMain
usando la funciónread_csv
de pandas. De manera similar, puedes leer el archivo de mapeo en un dataframedfMap
.Luego, puedes iterar a través de cada fila en
dfMain
y verificar si la columnadescription
contiene alguna de las palabras clave endfMap
. Para esto, puedes usar la funciónapply
de pandas junto con una función lambda que busca las palabras clave en la columnadescription
.Una vez que hayas identificado las palabras clave, puedes usar la función
merge
de pandas para agregar el código correspondiente al dataframedfMain
. Puedes hacer la fusión en la columnasleutel
endfMap
y la columnadescription
endfMain
.Finalmente, puedes llenar cualquier valor faltante en la columna
category
conNaN
.Aquí hay un ejemplo de código que hace esto:
Esto debería darte el dataframe de salida deseado.