Seite 1 von 1
Reshape Dataframe
Verfasst: Montag 7. Februar 2022, 14:35
von horstel_horst
Ich möchte einen Pandas DF tranformieren, so sieht der DF aus:
Code: Alles auswählen
import pandas as pd
ids = ['1','1','1','2','2','3','3']
lang = ['de','de','de','fr','fr','ch','ch']
value = ['de_1','de_2','de_3','fr_1','fr_2','ch_2','ch_3']
df = pd.DataFrame({
'ids':ids,
'lang':lang,
'value':value})
Ziel ist folgender DF:
Code: Alles auswählen
ids = ['1','2','3']
value_de = ['de_1','de_2','de_3']
value_fr = ['fr_1','fr_2','']
value_ch = ['','ch_2','ch_3']
new_df = pd.DataFrame({
'ids':ids,
'value_de' : value_de,
'value_fr' : value_fr,
'value_ch' : value_ch
})
Ich hab es mit pivot, groupby etc. versucht, bin aber nicht zum Ziel gekommen.
Hat jemand eine Lösung parat?
Re: Reshape Dataframe
Verfasst: Montag 21. Februar 2022, 17:23
von LukeNukem
horstel_horst hat geschrieben: ↑Montag 7. Februar 2022, 14:35
Ich möchte einen Pandas DF tranformieren, so sieht der DF aus:
Code: Alles auswählen
ids = ['1','1','1','2','2','3','3']
lang = ['de','de','de','fr','fr','ch','ch']
value = ['de_1','de_2','de_3','fr_1','fr_2','ch_2','ch_3']
[...]
[code]ids = ['1','2','3']
value_de = ['de_1','de_2','de_3']
value_fr = ['fr_1','fr_2','']
value_ch = ['','ch_2','ch_3']
Ich hab es mit pivot, groupby etc. versucht, bin aber nicht zum Ziel gekommen.
Hat jemand eine Lösung parat?
Wie soll das gehen? Python ist eine Programmiersprache und kann viele erstaunliche Dinge, aber wahrsagen kann es meines Wissens noch nicht. Und ohne diese Fähigkeit stellt sich die Frage, woher sollte der Interpreter denn sonst wissen soll, ob der leere String an die Liste angehängt werden soll, wie in "value_fr", oder ob er vorangestellt werden soll, wie in "value_ch"?
Re: Reshape Dataframe
Verfasst: Mittwoch 23. Februar 2022, 00:07
von rogerb
Also *eine* Gesetzmäßigkeit um von den Ausgangswerten auf die Zielwerte zu kommen, lässt sich relativ leicht ableiten.
Da man aber gar nichts über die Daten weiß, ist nicht klar, ob diese dann allgemeingültig ist.
Code: Alles auswählen
import pandas as pd
ids = ["1", "1", "1", "2", "2", "3", "3"]
lang = ["de", "de", "de", "fr", "fr", "ch", "ch"]
value = ["de_1", "de_2", "de_3", "fr_1", "fr_2", "ch_2", "ch_3"]
new_ids =sorted(set(ids))
value_de = [val if val in value else "" for val in (f"de_{num}" for num in new_ids)]
value_fr = [val if val in value else "" for val in (f"fr_{num}" for num in new_ids)]
value_ch = [val if val in value else "" for val in (f"ch_{num}" for num in new_ids)]
print(new_ids)
print(value_de)
print(value_fr)
print(value_ch)
"""
['1', '2', '3']
['de_1', 'de_2', 'de_3']
['fr_1', 'fr_2', '']
['', 'ch_2', 'ch_3']
"""