![](/img/trans.png)
[英]Calculate a score for each row based on multiple conditions in pandas avoiding a for loop
[英]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.