[Python] Conditioneel arrays bewerken

Pagina: 1
Acties:

Vraag


Acties:
  • 0 Henk 'm!

  • Yucon
  • Registratie: December 2000
  • Nu online
Sinds een tijdje ben ik met python bezig. Dat gaat aardig maar ik merk dat ik veel dingen op de klassieke manier doe, met overal doorheen itereren terwijl dat nu net niet de bedoeling lijkt te zijn. Ik heb al diverse tutorials doorgewerkt (oa https://www.datacamp.com/...thon-numpy-tutorial#array , hele lap en flink wat testwerk) en ik kom er maar niet uit hoe ik onderstaande (versimpelde) situatie aan moet pakken.

In tabelvorm, de kopjes zijn voor de verduidelijking van het voorbeeld. In python is het een numpy array.

medewerker, locatie, afdeling
======================
jan, amsterdam, administratie
jan, rotterdam, verkoop
jan, maastricht, inkoop
piet, leiden, inkoop
piet, maastricht, engineering
klaas, utrecht, verkoop

Laten we aannemen dat de locatie in maastricht alleen nog maar verkoop gaat doen en alle medewerkers daar naar de afdeling verkoop zullen gaan. In SQL termen dus


update table
set afdeling = verkoop
where locatie = maastricht

Bovenstaande data is verder niet representatief, ik probeer geen crm systeem of zoiets in python na te bouwen maar het is waarschijnlijk wat beter leesbaar dan de echte data.

Het kan goed zijn dat de oplossing niet eens technisch is maar dat ik gewoon op de verkeerde manier denk. De algemene insteek van de voorbeelden is namelijk heel sterk om een arraydimensie of subset daarvan te selecteren en die vervolgens te veranderen.. en dus niet een aantal regels te selecteren en binnen die rijen een andere kolom te veranderen. Toch lijkt me dat niet zo'n vreemde wens.

Willen jullie me wat op weg helpen?

Beste antwoord (via Yucon op 03-10-2019 09:18)


  • HuHu
  • Registratie: Maart 2005
  • Niet online
Kijk eens naar pandas: https://pandas.pydata.org/ . Dat past waarschijnlijk beter bij wat je wilt.

Alle reacties


Acties:
  • Beste antwoord
  • +1 Henk 'm!

  • HuHu
  • Registratie: Maart 2005
  • Niet online
Kijk eens naar pandas: https://pandas.pydata.org/ . Dat past waarschijnlijk beter bij wat je wilt.

Acties:
  • +2 Henk 'm!

  • wimjongil
  • Registratie: Augustus 2006
  • Niet online
df[afdeling][df[locatie] == "maastricht"] = "verkoop"

Acties:
  • 0 Henk 'm!

  • Yucon
  • Registratie: December 2000
  • Nu online
Oja, pandas.. ik heb er wel eens wat mee geprutst maar zo te zien heb ik met numpy een verkeerde afslag genomen. Ik ga ermee aan de slag.

Acties:
  • 0 Henk 'm!

  • TTHEEBO1
  • Registratie: Februari 2011
  • Laatst online: 08-08 20:26
Zelf ook nog een redelijke beginner, maar volgens mij moet dit ook met de np.where() functie moeten kunnen:

https://stackoverflow.com...step-explanation-examples

psn: jagermeistertim


Acties:
  • +1 Henk 'm!

  • Yucon
  • Registratie: December 2000
  • Nu online
Na wat testen heb ik het idee dat pandas inderdaad de beste weg is. Hieronder voor de search nog een linkje dat heel handig is: SQL -> Pandas

Bedankt!

mbt het Beste Antwoord kon ik moeilijk kiezen, maar uiteindelijk was het @HuHu die als eerste pandas noemde

[ Voor 20% gewijzigd door Yucon op 03-10-2019 09:19 ]


Acties:
  • 0 Henk 'm!

  • CurlyMo
  • Registratie: Februari 2011
  • Laatst online: 16:54
Pandas kan natuurlijk, maar SQLite zou ook kunnen. Dan heb je niet direct een grote database installatie nodig, terwijl je toch met SQL kan werken.

Sinds de 2 dagen regel reageer ik hier niet meer


Acties:
  • 0 Henk 'm!

  • Morrar
  • Registratie: Juni 2002
  • Laatst online: 14:45
wimjongil schreef op dinsdag 1 oktober 2019 @ 18:07:
df[afdeling][df[locatie] == "maastricht"] = "verkoop"
Deze syntax is iets netter ivm met de beruchte SettingWithCopywarning:

Python:
1
df.loc[df["locatie"] == "maastricht", "afdeling"] = "verkoop"


https://stackoverflow.com...withcopywarning-in-pandas

:)

[ Voor 11% gewijzigd door Morrar op 03-10-2019 09:38 ]

Pagina: 1