2016-08-03 16 views
3

私は、次のデータフレーム持っている:私は、日付に応じてそれをグループ化しているパンダのgroupbyオブジェクトをピボットするには?

df = pd.DataFrame([ 
     [123, 'abc', '121'], 
     [124, 'abc', '121'], 
     [456, 'def', '121'], 
     [123, 'abc', '122'], 
     [123, 'abc', '122'], 
     [456, 'def', '145'], 
     [456, 'def', '145'], 
     [456, 'def', '146'], 
    ], columns=['userid', 'name', 'dt']) 

を: df2 = df.groupby('dt').apply(lambda df: df.reset_index(drop=True))

は今、データフレームは次のようになります。今 enter image description here

、私が旋回するようにしたいです

:エンドDFは次のようになりますよう、グループごとに userid name_1, name_2, ..., name_k:彼らはこの形式であるように上記 df2を作成するように見えるようにするには、 pivot_tableでどこパラメータインデックス列を使用 useriddtcumcountを使用することができます
userid name 
123  abc 
124  abc 
456  def 
123  abc, abc 

答えて

2

は必要ありません。

df['cols'] = 'name_' + (df.groupby(['userid','dt']).cumcount() + 1).astype(str) 

print (df.pivot_table(index=['userid', 'dt'],columns='cols', values='name', aggfunc=''.join)) 
cols  name_1 name_2 
userid dt    
123 121 abc None 
     122 abc abc 
124 121 abc None 
456 121 def None 
     145 def def 
     146 def None 
+0

YUC < - あなたが正しく理解していました。ありがとうたくさん:D – Dawny33

2

groupbyapplyをチェックしてください。それぞれのドキュメントはherehereです。作成されたMultiIndexの余分なレベルはunstackdocs)です。

df = df.set_index(['userid', 'dt'])['name'] 
df = df.groupby(level=[0,1]).apply(
    lambda st: pd.Series(st.values, index=['name_%i'%i for i in range(st.shape[0])]) 
).unstack(level=-1) 
print(df) 

出力

  name_0 name_1 
userid dt    
123 121 abc None 
     122 abc abc 
124 121 abc None 
456 121 def None 
     145 def def 
     146 def None 
関連する問題