2017-10-07 156 views
0

條件第一次出現的列值我有一個熊貓數據框如下:大熊貓得到的每

player condition num 
A  0   1 
A  1   2 
A  1   3 
B  0   1 
B  0   2 
B  1   3 
B  0   4 

我想補充一點,存儲num列,其中player的最低值的列condition列是。

的結果,因此,應該是這樣的:

player condition num numCondition 
A  0   1 2 
A  1   2 2 
A  1   3 2 
B  0   1 3 
B  0   2 3 
B  1   3 3 
B  0   4 3 

我知道,我需要每一個playergroupBy()。然後我需要一個apply()可能使用lambda()函數。但我還是無法將這些作品融合在一起。

編輯:condition列是我的例子中的簡化。實際上,應該簡單地使用通常的熊貓數據框查詢來過濾行。例如。 df[(df.condition == 1) & (df.otherCondition > 10)]

回答

1

通過使用drop_duplicates

df.player.map(df[df.condition==1].drop_duplicates(['player'],keep='first').set_index('player').num) 
    Out[221]: 
    0 2 
    1 2 
    2 2 
    3 3 
    4 3 
    5 3 
    6 3 
    Name: player, dtype: int64 

df['numCondition']=df.player.map(df[df.condition==1].drop_duplicates(['player'],keep='first').set_index('player').num) 
df 
Out[223]: 
    player condition num numCondition 
0  A   0 1    2 
1  A   1 2    2 
2  A   1 3    2 
3  B   0 1    3 
4  B   0 2    3 
5  B   1 3    3 
6  B   0 4    3 
+0

thx!如果一個組的條件從未滿足會發生什麼?也就是說,在一個組裏沒有價值1? – beta

+0

@beta將NaN替換NaN,可以通過'replace'或'fillna'完成 – Wen

1

先總結,然後加入回來dfplayer

df.join(
    df.groupby('player') 
     .apply(lambda g: g.num[g.condition == 1].min()) 
     .rename('numCondition'), 
on='player') 

# player condition num numCondition 
#0  A   0  1 2 
#1  A   1  2 2 
#2  A   1  3 2 
#3  B   0  1 3 
#4  B   0  2 3 
#5  B   1  3 3 
#6  B   0  4 3 
+0

會發生什麼,如果條件未謀面的一個羣體?也就是說,在一個組中從來沒有價值'1'? – beta

+0

它爲該玩家提供所有'NaN's。 – Psidom

+0

'numCondition'列中的Nan's?如果是的話,取代'NaN'的最快方法是什麼? – beta