Reputation: 13
I need to set the last column like min%-max% but i didn't find any solution, im working from a csv and need to write again.
zona;rango;nombre;porcentaje
Yermo de Agujas;Rango Alto;Hueso monstruo pequeño;45
Yermo de Agujas;Rango Alto;Hueso escogido;30
Yermo de Agujas;Rango Alto;Hueso fósil;20
Yermo de Agujas;Rango Alto;Reliquia de dracohueso;5
Yermo de Agujas;Rango Alto;Hueso monstruo pequeño;23
Yermo de Agujas;Rango Alto;Hueso escogido;40
Yermo de Agujas;Rango Alto;Hueso fósil;30
Yermo de Agujas;Rango Alto;Reliquia de dracohueso;7
y need somthing like:
zona;rango;nombre;porcentaje
Yermo de Agujas;Rango Alto;Hueso monstruo pequeño;23-45
Yermo de Agujas;Rango Alto;Hueso escogido;30-40
Yermo de Agujas;Rango Alto;Hueso fósil;20-30
Yermo de Agujas;Rango Alto;Reliquia de dracohueso;5-7
i have tried
df.groupby(['zona', 'rango', 'nombre'])
df.agg({'porcentaje': [np.min,np.max]})
df.groupby(['zona', 'rango', 'nombre'])['porcentaje'].transform(lambda x: '-'.join(x))
any ideas?
Upvotes: 0
Views: 76
Reputation: 150785
Try:
(df.groupby(['zona','rango', 'nombre'])['porcentaje']
.agg(['min','max'])
.astype(str)
.agg('-'.join, axis=1)
.reset_index(name='porcentaje')
)
Output:
zona rango nombre porcentaje
0 Yermo de Agujas Rango Alto Hueso escogido 30-40
1 Yermo de Agujas Rango Alto Hueso fósil 20-30
2 Yermo de Agujas Rango Alto Hueso monstruo pequeño 23-45
3 Yermo de Agujas Rango Alto Reliquia de dracohueso 5-7
Upvotes: 2