gpt4 book ai didi

python - Pandas groupby 和多列的加权和

转载 作者:行者123 更新时间:2023-12-01 00:10:07 32 4
gpt4 key购买 nike

我看到了十几个 Pandas groupby 多列问题,但我不知道如何让它在合理的时间内运行。我的目标是对几列进行分组,并根据我的权重将结果子集应用于每个剩余列:

# Example data:
weights = np.array([.20, .60, .20])
data = pd.DataFrame([[0, "TX", 10, 55], [0, "TX", 5, 30], [0, "TX", 2, 75], [1, "TX", 4, 30], [1, "TX", 8, 100], [1, "TX", 2, 30]], columns=["sim", "state", "x1", "x2"])

print(data)
sim state x1 x2
0 0 TX 10 55
1 0 TX 5 30
2 0 TX 2 75
3 1 TX 4 30
4 1 TX 8 100
5 1 TX 2 30

我无法让 np.dot 开箱即用,因此我必须将乘法和求和分解为单独的步骤。这是我尝试过的方法,但在我的几百万行数据集上,这需要大约 2 分钟,更不用说非常难以阅读:

results = data.groupby(["sim", "state"]).apply(lambda sdf: (sdf[["x1", "x2"]] * weights.reshape((3,1))).sum())

print(results.reset_index())
sim state x1 x2
0 0 TX 5.4 44.0
1 1 TX 6.0 72.0

最佳答案

怎么样...

(df.set_index(['sim', 'state'])
.mul(np.tile(weights, len(df) // len(weights)), axis=0)
.sum(level=[0, 1]))

x1 x2
sim state
0 TX 5.4 44.0
1 TX 6.0 72.0

这是如何工作的,

  • 将索引设置为不应相乘的值(本质上是 df 的主键)
  • 使用mul与权重执行广播乘法
  • 对指数进行分组并对加权值求和。

这是在 len(df) % len(weights) == 0 的假设下工作的。

关于python - Pandas groupby 和多列的加权和,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59689836/

32 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com