【发布时间】:2020-04-28 14:02:51
【问题描述】:
我已经看到了十几个 Pandas groupby 多列问题,但我不知道如何让它在合理的时间内运行。我的目标是对几列进行分组,并使用生成的子集将np.dot 应用于我的权重的每个剩余列:
# 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
【问题讨论】:
标签: python pandas numpy group-by pandas-groupby