【发布时间】:2020-09-21 12:42:28
【问题描述】:
我正在尝试根据数据框每一行中的多个条件即时计算中值,但我没有到达那里。
基本上,对于每一行,我都在计算同一部门中 B 级薪酬高于该行所列薪酬的人数。我能够使用 lambda 函数使计数正常工作:
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'] 的中位数。我不能应用 .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
【问题讨论】:
-
请与预期输出共享示例数据。数据,而不是图片。
-
好的,我添加了一些带有更多上下文的假数据。
标签: python pandas dataframe conditional-statements median