2016-04-19 7 views
0

私はこれに近い回答を見つけましたが、それほどトリックはありません。私はそうのように見えるのデータテーブルを持っている:データフレーム行にまたがってカウントが発生する

ID   DATE 
74180  11/07/2000 
74180  11/04/2008 
81337  11/04/2008 
81337  11/02/2010 
82557  11/07/2000 
82557  11/05/2002 
82557  11/02/2004 
82557  11/04/2008 
82557  11/06/2012 
82901  11/07/2000 
82901  11/05/2002 
82901  11/02/2004 
82901  11/04/2008 
82901  11/06/2012 
82901  11/04/2014 
83103  11/04/2008 
83103  11/02/2010 
83103  11/06/2012 
83103  11/04/2014 

私は、各IDが単一の行を占めるようにこれを変換したいとバイナリ列として表され、様々な日付は、IE:

ID  11/07/2000 11/05/2002 11/02/2004 ... 
74180  1    0   0 
81337  0    0   0 

どれでもガイダンスは高く評価されるだろう。

答えて

0

まず、:

ID = [74180,74180,81337,81337,82557,82557,82557,82557,82557,82901,82901,82901,82901,82901,82901,83103,83103,83103,83103] 
DATE = ['2000-11-07','2008-11-04','2008-11-04','2010-11-02','2000-11-07','2002-11-05','2004-11-02','2008-11-04','2012-11-06','2000-11-7','2002-11-05','2004-11-02','2008-11-04','2012-11-06','2014-11-04','2008-11-04','2010-11-02','2012-11-06','2014-11-04'] 
df = pd.DataFrame({'ID':ID, 'DATE':DATE}) 

実際の処理:

df2 = pd.get_dummies(df.set_index('ID')['DATE']) 
df2.reset_index().groupby('ID').sum() 

を出力:

 2000-11-07 2000-11-7 2002-11-05 2004-11-02 2008-11-04 ... 
ID 
74180   1.0  0.0   0.0   0.0   1.0 ... 
81337   0.0  0.0   0.0   0.0   1.0 ... 
82557   1.0  0.0   1.0   1.0   1.0 ... 
82901   0.0  1.0   1.0   1.0   1.0 ... 
83103   0.0  0.0   0.0   0.0   1.0 ... 
+0

これは確かに近いと思われますが、何らかの理由で私のコードが望ましい結果を生み出しています。私はまだ各IDの複数の行を保持しています。 DF2 = pd.get_dummies(df2.set_index( 'ID')[ 'DATE']) df2.reset_index()。GROUPBY( 'ID')。和() 私は間違いを見ますか? – Ben

0

考えてみましょう:あなたのデータフレームを再作成

df.set_index('ID', inplace=True) 
pd.get_dummies(df.loc[:, 'DATE']).groupby(level='ID').sum() 

     2000-11-07 2002-11-05 2004-11-02 2008-11-04 2010-11-02 2012-11-06 \ 
ID                    
74180   1.0   0.0   0.0   1.0   0.0   0.0 
81337   0.0   0.0   0.0   1.0   1.0   0.0 
82557   1.0   1.0   1.0   1.0   0.0   1.0 
82901   1.0   1.0   1.0   1.0   0.0   1.0 
83103   0.0   0.0   0.0   1.0   1.0   1.0 

     2014-11-04 
ID     
74180   0.0 
81337   0.0 
82557   0.0 
82901   1.0 
83103   1.0 
+0

素敵ですが、これが最初の問題を解決します。今私はIDに基づいてそれらを単一の行に崩壊させる必要があります。 – Ben