2017-12-19 15 views
0

グループごとに値をインデックスに照合する簡単な方法はありますか? (グループのIDで、一致がそのランクに基づいた名前)グループごとに一致するパンダ

Id Rank Name 
111 7  x  
111 5  y  
111 1  z  
222 1  x  
333 5  a  
333 1  b  
444 1  c  

私は私のDFへの列を追加したい:

例えば

、私はこのDFを持っている:私は何を意味することはこれです

Id Rank Name New Col 
111 7  x  x 
111 5  y  y-x 
111 1  z  z-x 
222 1  x  x 
333 5  a  a 
333 1  b  b-a 
444 1  c  c 
+0

投稿に正しいコードはありません。私はパンダを学んでいます。あなたがそこにいかに乗っているか知りたい、解決方法を理解したいと思います。 – IMCoins

+0

@IMCoins私はロジックがダウンしているだけですが、コードの意味では、まだ書く方法がわかりません – TylerNG

答えて

1

私はgroupby + firstでこれを行う、次にどこの変更を適用するかを決定するためにnp.whereを使用すると思います。

i = df.groupby('Id').Name.transform('first')  
df['New Col'] = np.where(np.equal(df.Name, i), df.Name, df.Name + '-' + i) 

df 
    Id Rank Name New Col 
0 111  7 x  x 
1 111  5 y  y-x 
2 111  1 z  z-x 
3 222  1 x  x 
4 333  5 a  a 
5 333  1 b  b-a 
6 444  1 c  c 
+0

いつものように魅力的なように働いていました:) 好奇心から、トップの代わりに次の値でマッチさせたいですか? たとえば、id = 111の場合、New Colはz-xの代わりにx、y-x、およびz-yになります。 – TylerNG

+0

@TylerNGよろしくお願いします。あなたの他の質問については、うーん、それは別の答えが必要になります。あなたがそれを望むなら、少し時間をください。あなたは新しい質問を開くこともできます。私はあなたに答えます。 –

+1

@TylerNGさて、ここでは、 '(df.Name + ' - ' + df.groupby( 'Id')。 –

関連する問題