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