2017-05-20 3 views
0

私はpandasでpython 3を使用しており、sas 'proc transposeのようにデータフレームを転置する必要があります。私は動作していない以下のコードを使用しています。うまくいけば、コードレットはあなたが私の目標を理解できるようにします。私は「働いていない」コードをマークし....Pythonデータフレームを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 

答えて

0

SASのproc transposeは、様々なvarbyグループに広いlongに、ワイドに長いデータセットを変換することができ多面整形ツールです。 Pythonのパンダには、stack,meltpivot、簡略化されたtranspose(行と列の入れ替え)などのいくつかの再形成メソッドに対応するものがあります。

あなたのニーズを具体的には分かっていませんが、インデックス付きの列の長さと幅が変わるパンダのpivot_tableを検討してください。以下は、sasタグとpandasタグの中の現在のトップ5のStackoverflowアンサーを使用したサンプルデータ、具体的には上位3つのタグを示しています。

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 

出力(スクリーンショット分割をリシェイプ

データ

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+") 

pivot_tableは、階層の列を作成するためと、zipとリストの内包は、両方のレベルをマージするために実行されます2つになりますが、10行+ヘッダのみです)

関連する問題