我试图找到基于多个列的列的加权中值.以下是一个示例:

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列作为权重.我也想使用聚合,因为我也想找到更好价格列的和.

最初,我try 将包wquantilesweighted.median函数一起使用,为了完成上述任务,我try 了类似于以下代码的内容:

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)

推荐答案

这里有一个方法.要获得加权中值,可以使用TotalCost获得位置中np.repeat个值中的np.median个.每组执行此操作.然后concat将结果与每组另一列上的总和相加.

gr = df.groupby(['Date',  'Item'])
res = pd.concat(
    [gr.apply(lambda x: np.median(np.repeat(x.Location, x.TotalCost))),
     gr['BetterPrice'].sum()],
    keys=['Loc_weigthed_median','BetterPrice_sum'],
    axis=1
).reset_index()
print(res)
#          Date Item  Loc_weighted_median  BetterPrice_sum
# 0  2022-03-01   AB                  3.0                1
# 1  2022-03-01   AC                  2.0                1
# 2  2022-04-01   AB                  1.0                1
# 3  2022-04-01   AC                  3.0                1

Python相关问答推荐

Pydantic 2.7.0模型接受字符串日期时间或无

. str.替换pandas.series的方法未按预期工作

将两只Pandas rame乘以指数

运行终端命令时出现问题:pip start anonymous"

更改键盘按钮进入'

无法使用requests或Selenium抓取一个href链接

ODE集成中如何终止solve_ivp的无限运行

关于Python异步编程的问题和使用await/await def关键字

joblib:无法从父目录的另一个子文件夹加载转储模型

从嵌套的yaml创建一个嵌套字符串,后面跟着点

Python脚本使用蓝牙运行在Windows 11与raspberry pi4

解决调用嵌入式函数的XSLT中表达式的语法移位/归约冲突

使用Openpyxl从Excel中的折线图更改图表样式

polars:有效的方法来应用函数过滤列的字符串

30个非DATETIME天内的累计金额

如何将一组组合框重置回无 Select tkinter?

每次查询的流通股数量

在使用ROLING()获得最大值时,是否可以排除每个窗口中的前n个值?

pyspark where子句可以在不存在的列上工作

在不降低分辨率的情况下绘制一组数据点的最外轮廓