2017-06-13 2 views
1

実行中パンダの複数列を新しい列に展開

Pythonバージョン:2.7.12 | Anaconda 4.1.1(64-bit)| (デフォルトでは、2016年6月29日、11時07分13秒)[MSC v.1500 64ビット(AMD64)]パンダバージョン:0.18.1 IPythonバージョン:4.2.0

をWindows 7で何私はどうなるのか

pd.DataFrame([[1,'a',1], 
       [1,'b',2], 
       [1,'c',3], 
       [1,'d',4], 
       [2,'e',5], 
       [2,'f',6], 
       [2,'g',7], 
       [3,'h',8], 
       [3,'i',9], 
       [4,'j',10]],columns=['ID','var1','var2']) 

から

pd.DataFrame([[1,'a',1,'b',2,'c',3,'d',4], 
       [2,'e',5,'f',6,'g',7], 
       [3,'h',8,'i',9], 
       [4,'j',10]],columns=['ID','var1','var2','newVar1_1','newVar1_2','newVar2_1','newVar2_2','newVar3_1','newVar3_2']) 

のようなデータフレームを取得する簡単な方法だろうがIDによってグループにあるし、各項目から、新しい行を作成するGROUPBYオブジェクトに反復処理し、それを最初にemtptyに追加する実際の場合は、開始データフレームの行が数千になるため、これは遅いです。

提案がありますか?

答えて

1
df.set_index(['ID', df.groupby('ID').cumcount()]).unstack().sort_index(1, 1) 

    var1 var2 var1 var2 var1 var2 var1 var2 
     0  0  1 1  2 2  3 3 
ID            
1  a 1.0  b 2.0  c 3.0  d 4.0 
2  e 5.0  f 6.0  g 7.0 None NaN 
3  h 8.0  i 9.0 None NaN None NaN 
4  j 10.0 None NaN None NaN None NaN 

以上の完全な

d1 = df.set_index(['ID', df.groupby('ID').cumcount()]).unstack().sort_index(1, 1) 
d1.columns = d1.columns.to_series().map('new{0[0]}_{0[1]}'.format) 
d1.reset_index() 

    ID newvar1_0 newvar2_0 newvar1_1 newvar2_1 newvar1_2 newvar2_2 newvar1_3 newvar2_3 
0 1   a  1.0   b  2.0   c  3.0   d  4.0 
1 2   e  5.0   f  6.0   g  7.0  None  NaN 
2 3   h  8.0   i  9.0  None  NaN  None  NaN 
3 4   j  10.0  None  NaN  None  NaN  None  NaN 
+0

おかげで@piRSquared。これはいいね! – akotronis

関連する問題