index - pandas python
Cómo convertir str a flotar en pandas (2)
Solución alternativa que utiliza map_
mapping de @COLDSPEED:
In [237]: df.assign(TaxW=df[''TaxW''].map(map_)) /
.eval("Leistungswert = Taxpunkte * Anzahl * TaxW", inplace=False)
Out[237]:
Leistungserbringer Anzahl Leistung AL TL TaxW Taxpunkte Leistungswert
0 McGregor Sarah 12 Konsilium 147.28 87.47 0.89 234.75 2507.1300
1 McGregor Sarah 12 Grundberatung 47.00 67.47 0.89 114.47 1222.5396
2 McGregor Sarah 12 Extra 5min 87.28 87.47 0.89 174.75 1866.3300
3 McGregor Sarah 12 Respirator 147.28 102.01 0.89 249.29 2662.4172
4 McGregor Sarah 12 Besuch 167.28 87.45 0.89 254.73 2720.5164
Estoy tratando de convertir una cadena de mi conjunto de datos en un tipo de letra flotante. Aquí algo de contexto:
import pandas as pd
import numpy as np
import xlrd
file_location = "/Users/sekr2/Desktop/Jari/Leistungen/leistungen2_2017.xlsx"
workbook = xlrd.open_workbook(file_location)
sheet = workbook.sheet_by_index(0)
df = pd.read_excel("/Users/.../bla.xlsx")
df.head()
Leistungserbringer Anzahl Leistung AL TL TaxW Taxpunkte
0 McGregor Sarah 12 ''Konsilium'' 147.28 87.47 KVG 234.75
1 McGregor Sarah 12 ''Grundberatung'' 47.00 67.47 KVG 114.47
2 McGregor Sarah 12 ''Extra 5min'' 87.28 87.47 KVG 174.75
3 McGregor Sarah 12 ''Respirator'' 147.28 102.01 KVG 249.29
4 McGregor Sarah 12 ''Besuch'' 167.28 87.45 KVG 254.73
Para seguir trabajando en esto, necesito encontrar una manera de crear una nueva columna: df[''Leistungswert''] = df[''Taxpunkte''] * df[''Anzahl''] * df[''TaxW'']
.
TaxW muestra la cadena ''KVG'' para cada entrada. Sé por los datos que ''KVG'' = 0.89. He golpeado una pared con tratar de convertir la cuerda en un flotador. No puedo simplemente crear una nueva columna con el tipo de letra flotante porque este código debería funcionar con más entradas. En la columna TaxW, hay aproximadamente 7 entradas diferentes con todos los valores diferentes.
Estoy agradecido por toda la información sobre este asunto.
Suponiendo que ''KVG''
no es el único valor de cadena posible en TaxW
, debe almacenar un mapeo de cadenas en su equivalente flotante, como este:
map_ = {''KVG'' : 0.89, ... } # add more fields here
Entonces, puedes usar Series.map
:
In [424]: df[''Leistungswert''] = df[''Taxpunkte''] * df[''Anzahl''] * df[''TaxW''].map(map_); df[''Leistungswert'']
Out[424]:
0 2507.1300
1 1222.5396
2 1866.3300
3 2662.4172
4 2720.5164
Name: Leistungswert, dtype: float64
Alternativamente, puede usar df.transform
:
In [435]: df[''Leistungswert''] = df.transform(lambda x: x[''Taxpunkte''] * x[''Anzahl''] * map_[x[''TaxW'']], axis=1); df[''Lei
...: stungswert'']
Out[435]:
0 2507.1300
1 1222.5396
2 1866.3300
3 2662.4172
4 2720.5164
Name: Leistungswert, dtype: float64