2016-05-05 45 views
1

私はパンダの初心者ですので、私に同行してください。誰もがどのように教えてもらえますパンダのデータフレームgroupby

x y w 

1 2 5,7  
3 4 2,5  
5 4 8  
5 9 9 

x  y    w 

1  2    5     
1  2    7   
3  4    3   
5  4    8  
3  4    5  
5  9    9 

そして、私は次のような出力をしたい:私は、これは非常に基本的な質問/

私は、次のデータフレームの上にパンダで働いていることを知っていますpandas groupbyを使ってやってください。

+0

文字列型の 'w'列ですか、それとも配列ですか? –

答えて

1

あなたはapplyjoingroupbyを使用することができます:あなたが重複している場合は、drop_duplicatesを使用

#if type of column w is not string, convert it 
print type(df.at[0,'w']) 
<type 'numpy.int64'> 

df['w'] = df['w'].astype(str) 

print df.groupby(['x','y'])['w'].apply(','.join).reset_index() 
    x y w 
0 1 2 5,7 
1 3 4 3,5 
2 5 4 8 
3 5 9 9 

print df 
    x y w 
0 1 2 5 
1 1 2 5 
2 1 2 5 
3 1 2 7 
4 3 4 3 
5 5 4 8 
6 3 4 5 
7 5 9 9 

df['w'] = df['w'].astype(str) 
print df.groupby(['x','y'])['w'].apply(lambda x: ','.join(x.drop_duplicates())) 
     .reset_index() 

    x y w 
0 1 2 5,7 
1 3 4 3,5 
2 5 4 8 
3 5 9 9 

または変更EdChumソリューション:

print df.groupby(['x','y'])['w'].apply(lambda x: ','.join(x.astype(str).drop_duplicates())) 
     .reset_index() 

    x y w 
0 1 2 5,7 
1 3 4 3,5 
2 5 4 8 
3 5 9 9 
+0

ありがとう!これは機能します。しかしこれは値を繰り返す。同じ(x、y)のwについて同じ値を持つように、出力の値を繰り返します。どうすればそれを処理できますか? – user324

+0

編集を参照してください。私は解決策を追加する。 – jezrael

+0

それは動作します。ありがとう! – user324

1

あなたはgroupbyをすることができますが

In [220]: 
df.groupby(['x','y'])['w'].apply(lambda x: ','.join(x.astype(str))) 

Out[220]: 
x y 
1 2 5,7 
3 4 3,5 
5 4  8 
    9  9 
Name: w, dtype: object 

In [221]: 
df.groupby(['x','y'])['w'].apply(lambda x: ','.join(x.astype(str))).reset_index() 

Out[221]: 
    x y w 
0 1 2 5,7 
1 3 4 3,5 
2 5 4 8 
3 5 9 9 

EDITあなたの修正されたサンプルの

:列「x」と「y」と「W」の列にラムダを適用する上で、必要な場合はastypeを使用してdtypeをキャストする必要があります。

In [237]: 
df.groupby(['x','y'])['w'].apply(lambda x: ','.join(x.unique().astype(str))).reset_index() 

Out[237]: 
    x y w 
0 1 2 5,7 
1 3 4 3,5 
2 5 4 8 
3 5 9 9 
+0

ありがとう!これは機能します。しかしこれは値を繰り返す。同じ(x、y)のwについて同じ値を持つように、出力の値を繰り返します。どうすればそれを処理できますか? – user324

+0

ここでの通常のエチケットは、問題を代表するサンプルデータを投稿し、回答が返ってから反復的に新しい情報を増やしたり追加したりすることです – EdChum

関連する問題