簡體   English   中英

Pandas:根據每行中的多個條件計算中位數

[英]Pandas: Calculate Median Based on Multiple Conditions in Each Row

我正在嘗試根據數據框每一行中的多個條件即時計算中值,但沒有到達那里。

基本上,對於每一行,我都在計算同一部門中 B 級薪酬高於該行所列薪酬的人數。 我能夠讓計數與 lambda function 一起正常工作:

df['B Count'] = df.apply(lambda x: sum(df[(df['Department'] == x['Department']) & (df['Rank'] == 'B')]['Pay'] > x['Pay']), axis=1)

但是,我現在需要計算滿足這些條件的每個案例的中位數。 因此,在數據框的第 x 行中,我需要所有其他匹配 x['Department'] 和 df['Rank'] == 'B' 的 df['Pay'] 的中位數。 我不能用 apply.median() 代替 sum(),因為這給了我中位數,而不是中位數工資。 有什么想法嗎?

使用下面的假數據,上面的“B 計數”代碼計算每個部門中工資高於每個 A 的 B 的數量。這部分工作正常。 我想要的是然后構建“B 中位數”列,計算每個部門中 B 的中位數工資,其工資高於同一部門中的每個 A。

Person  Department  Rank    Pay B Count B Median
1       One         A       1000    1      1500
2       One         B        800        
3       One         A        500    2      1150
4       One         A       3000    0   
5       One         B       1500        
6       Two         B       2000        
7       Two         B       1800        
8       Two         A       1500    3      1800
9       Two         B       1700        
10      Two         B       1000        

好吧,我可以用 function 做我想做的事:

def median_b(x):
    if x['B Count'] == 0:
        return np.nan
    else:
        return df[(df['Department'] == x['Department']) & (df['Rank'] == 'B') & (
            df['Pay'] > x['Pay'])]['Pay'].median()

df['B Median'] = df.apply(median_b, axis = 1)

你們中有人知道實現這一結果的更好方法嗎?

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM