2016-08-03 6 views
0

私はこのデータフレームを持っている:重複ID列のデータを格納する新しい列を作成する方法は?

ID key 
0 1 A 
1 1 B 
2 2 C 
3 3 D 
4 3 E 
5 3 E 

私はkey列にデータを格納するためにnecessary- -AS追加key列を作成したい重複IDs

がある場合は、この出力の抜粋です。

0123:

ID key key2 
0 1 A  B # Note: ID#1 appeared twice in the dataframe, so the key value "B" 
       # associated with the duplicate ID will be stored in the new column "key2" 

完全な出力は次のようにすべきです

この問題にどのようにアプローチすればよいですか?

おかげで、

答えて

1

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

df.groupby('ID')['key'].apply(
    lambda s: pd.Series(s.values, index=['key_%s' % i for i in range(s.shape[0])]) 
).unstack(-1) 

出力

key_0 key_1 key_2 
ID     
1  A  B None 
2  C None None 
3  D  E  E 

あなたが列としてIDをしたい場合は、このデータフレームにreset_indexを呼び出すことができます。

+0

驚くべきことだそれ!コードで同じデータフレームを扱うことは可能ですが、追加の列 'AltterKey'を使用すると、データフレームには合計3列(' ID'、 'key'、および' AlterKey')があります。コードを修正して動作させるにはどうすればよいですか? @Alex – MEhsan

+0

私は新しい列 'AlterKey'に' lambda'関数をどのように適用できますか? ありがとう、@アレックス – MEhsan

1

あなたはpivot_tablecumcountを使用することができます。

df['cols'] = 'key' + df.groupby('ID').cumcount().astype(str) 
print (df.pivot_table(index='ID', columns='cols', values='key', aggfunc=''.join)) 
cols key0 key1 key2 
ID     
1  A  B None 
2  C None None 
3  D  E  E 
関連する問題