Ich habe eine Menge hässlicher Kundendaten, die ich zu normalisieren versuche. Es sieht im Grunde so aus:
Customer Order1 Order2 Order3 ... OrderN
John This That The ... Other
Shelly Thing1 Thing2 Thing3 ... ThingN
. . . . .
. . . . .
Also möchte ich es so ändern, dass es so aussieht:
Customer Order
John This
John That
John The
Shelly Thing1
Shelly Thing2
Und so weiter.
Ich bin mir jedoch nicht sicher, wie ich das machen soll.
Jede Hilfe wäre toll!
4 Antworten
Genau ein stack
und zwei reset_index
Anrufe.
df
Customer Order1 Order2 Order3 OrderN
0 John This That The Other
1 Shelly Thing1 Thing2 Thing3 ThingN
(df.set_index('Customer')
.stack()
.reset_index(level=1, drop=True)
.reset_index(name='Order')
)
Customer Order
0 John This
1 John That
2 John The
3 John Other
4 Shelly Thing1
5 Shelly Thing2
6 Shelly Thing3
7 Shelly ThingN
pd.melt ist derjenige, den Sie sind Auf der Suche nach:
# Assuming all the other columns are orders except for the Customer column
value_list = [col for col in df.columns if col != 'Customer']
pd.melt(df, id_vars=['Customer'], value_vars=value_list,
value_name='Order').drop('variable', axis=1)
Customer Order
0 John this
1 Shelly thing1
2 John that
3 Shelly thing2
4 John that
5 Shelly thing2
Ich denke, die Verwendung von stack
ist etwas besser
df.set_index('Customer').stack().reset_index(level=0)
Out[1219]:
Customer 0
Order1 John This
Order2 John That
Order3 John The
OrderN John Other
Order1 Shelly Thing1
Order2 Shelly Thing2
Order3 Shelly Thing3
OrderN Shelly ThingN
Mit einem Verständnis
pd.DataFrame(
[[c, o] for c, *O in df.values for o in O],
columns=['Customer', 'Order']
)
Customer Order
0 John This
1 John That
2 John The
3 John Other
4 Shelly Thing1
5 Shelly Thing2
6 Shelly Thing3
7 Shelly ThingN
Verwandte Fragen
Neue Fragen
python
Python ist eine dynamisch typisierte Mehrzweck-Programmiersprache mit mehreren Paradigmen. Es wurde entwickelt, um schnell zu lernen, zu verstehen, zu verwenden und eine saubere und einheitliche Syntax durchzusetzen. Bitte beachten Sie, dass Python 2 ab dem 01.01.2020 offiziell nicht mehr unterstützt wird. Fügen Sie für versionenspezifische Python-Fragen das Tag [python-2.7] oder [python-3.x] hinzu. Wenn Sie eine Python-Variante (z. B. Jython, PyPy) oder eine Bibliothek (z. B. Pandas und NumPy) verwenden, fügen Sie diese bitte in die Tags ein.