我正在尝试根据多列查找一个列的加权中位数。以下是一个示例:
Date | Item | BetterPrice | TotalCost | Location
-------------------------------------------------------------------------
2022-03-01 | AB | 0 | 200 | 3
2022-03-01 | AB | 0 | 200 | 2
2022-03-01 | AB | 1 | 300 | 3
2022-03-01 | AC | 1 | 400 | 2
2022-04-01 | AB | 1 | 400 | 1
2022-04-01 | AC | 1 | 100 | 3
2022-04-01 | AC | 0 | 50 | 1
我想要找到Location
列的加权中位数,并且我希望使用TotalCost
列作为权重。 我想要使用聚合函数,因为我还想找到BetterPrice
列的总和。
最初,我尝试使用wquantiles
包中的weighted.median
函数来完成任务,针对上述任务,我尝试了类似以下代码的操作:
import wquantiles
wm = lambda x: weighted.median(x , TotalCost)
df2 = df.groupby(['Date', 'Item']).agg({'BetterPrice': 'sum', "Location": wm}).reset_index()
很遗憾,这似乎不起作用,所以我想询问如何最好地完成这个任务,谢谢!
此外,这是一个数据框,可以复制上述问题(希望它足够详细)。
import pandas as pd
data={'Date':['2022-03-01','2022-03-01','2022-03-01','2022-03-01', '2022-04-01', '2022-04-01', '2022-04-01'],'Item':['AB','AB','AB','AC', 'AB', 'AC', 'AC'],'BetterPrice':[0,0,1,1, 1, 1, 0],'TotalCost':[200,200,300,400, 400, 100, 50],'Location':[3,2,3,2,1,3, 1]}
df=pd.DataFrame(data)
groupby
之后,使用apply
而不是agg
c。另外,为什么你在BetterPrice列上使用size
,而在文本中说你想要sum
呢? - Ben.Tsum
更新了我的代码。另外,我会尝试你提供的链接答案 - 实际上我可能几天前就尝试过了,因为它看起来非常熟悉,但我还是会再试一次以防万一。 - rightleftdownup313