2017-05-30 182 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