2017-05-20 3 views
0

Ich benutze Python 3 mit Pandas und muss einen Datenrahmen wie sas 'proc transpose transponieren. Ich verwende den folgenden Code, der nicht funktioniert. Hoffentlich lässt dich das Codelet mein Ziel verstehen. Ich markierte die ‚nicht funktioniert‘ Codes ....Python Datenrahmen transponieren wie SAS

byvars = ['Unique_Id','Month'] 
dfrm = test_data 
idvars = 'Activity_Type' 
prefix = 'test' 

var_vars = [for i in list(dfrm) if list(dfrm) not in byvars,idvars] # ------ Not Working 

dfrm_txp = dfrm[byvars].drop_duplicates() 

for i in dfrm[idvars].drop_duplicates(): 
    dfrm_txp = pd.merge(dfrm_txp,dfrm[dfrm[idvars]==i].drop(idvars, axis = 1), 
         on = byvars,how='outer') 

    dfrm_txp = dfrm_txp.rename(columns = {var_vars :prefix + var_vars +'_' + str(i)}) # ---- Not Working 

Antwort

0

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)

Reshaped Dataframe Output