SAS proc transpose
ist ein vielschichtiges Umformwerkzeug, das Datensätze lang breit, breit zu lange in verschiedenen var
und by
Gruppierungen verwandeln kann. Pythons Pandas haben Gegenstücke über mehrere Umformungsmethoden wie stack
, melt
, pivot
und vereinfacht transpose
(tauschen Sie Zeilen und Spalten aus).
Obwohl ich Ihre Bedürfnisse nicht genau kenne, betrachten Sie Pandas 'pivot_table, die lange auf indizierte Spalten umformen können. Im Folgenden werden Beispieldaten mit den aktuellen Top 5 Stackoverflow-Beantwortern in den Tags sas und pandas dargestellt, insbesondere die drei wichtigsten Tags. Und weil pivot_table
hierarchische Spalten erstellt, wird eine Liste Verständnis mit zip
laufen beide Ebenen zusammenführen:
Daten
from io import StringIO
import pandas as pd
txt = """UniqueID Month ActivityType Score Posts
Joe May sas 3151 1980
Tom May sas 792 690
DomPazz May sas 597 417
Reeza May sas 549 511
Longfish May sas 478 255
AndyHayden May pandas 8063 1281
jezrael May pandas 7976 4754
EdChum May pandas 6579 2501
unutbu May python 39827 6409
piRSquared May pandas 5024 3004
Joe May sas-macro 343 184
Tom May sas-macro 96 83
DomPazz May sas-macro 46 26
Reeza May sas-macro 54 39
Longfish May sql 62 39
AndyHayden May python 7991 1360
jezrael May python 7485 4185
EdChum May python 6439 2363
unutbu May numpy 6382 1035
piRSquared May python 4625 2782
Joe May sql 279 189
Tom May sql 91 79
DomPazz May sql 33 30
Reeza May sql 32 38
Longfish May variables 19 8
AndyHayden May dataframe 2264 191
jezrael May dataframe 2847 1601
EdChum May dataframe 1748 529
unutbu May pandas 6345 1276
piRSquared May dataframe 1696 853"""
df = pd.read_table(StringIO(txt), sep="\s+")
umformen
byvars = ['UniqueID', 'Month']
reshapedf = df.pivot_table(index=byvars, columns=['ActivityType'], aggfunc='max')
# RENAME COLUMNS WITH PREFIX AND VARIABLE/VALUE NAMES
reshapedf.columns = ['test_'+"_".join(i) for i in zip(reshapedf.columns.get_level_values(0),
reshapedf.columns.get_level_values(1))]
print(reshapedf) # PRINT TO SCREEN
reshapedf.to_csv('Reshape_Output.csv') # OUTPUT TO CSV
Output(Screenshot Splits in zwei aber ist nur 10 Zeilen + Header)