2017-05-30 3 views
2

における構文私は、次のデータセットがあります。パンダ:GROUPBY

id window Rank member 
1 2  2  0 
1 3  2  0 
2 3  1  0 
2 2  1  0 

を私はメンバーが時にウィンドウ== 3ランクに等しくなるようにしたいです。これを行うには、私は次のコマンドを持っています:

df["member"]= df[df['window']==3]['Rank'][0] 

しかし、私はgroupby文のIDでグループ化したいと思います。次のコマンドはエラーを返します。おそらく私はここで欠けている簡単なことですが、私は上記のコマンドでgroupbyを使用する方法を回避することはできません。すべての助けが大歓迎です。

df["member"]= df.groupby("id")[df[df['window']==3]['Rank'][0]] 
+0

を?あなたの期待する結果は何か、私はあなたがしようとしていることに従うことができません。 – AChampion

答えて

2

あなたはpandas.DataFrame.where使用してこれを達成することができます - それは戻っているどのようなエラー

df = pd.DataFrame({'id':[1,1,2,2],'window':[2,3,3,2],'Rank':[2,2,1,1],'member':[0,0,0,0]}) 
=> 
    Rank id member window 
0  2 1  0  2 
1  2 1  0  3 
2  1 2  0  3 
3  1 2  0  2 

df['member'] = df['Rank'].where(df['window']==3, df['member']) 

print(df) 
=> 
    Rank id member window 
0  2 1  0  2 
1  2 1  2  3 
2  1 2  1  3 
3  1 2  0  2 
1

あなたはnumpy.whereDataFrame.locを使用することができます。

df['member'] = np.where(df['window']==3, df['Rank'], df['member']) 
print (df) 
    id window Rank member 
0 1  2  2  0 
1 1  3  2  2 
2 2  3  1  1 
3 2  2  1  0 

df.loc[df['window']==3, 'member'] = df['Rank'] 
print (df) 
    id window Rank member 
0 1  2  2  0 
1 1  3  2  2 
2 2  3  1  1 
3 2  2  1  0