假设我在python中有一个由以下方案表示的ND数组:
["Event ID", "Event Location", "Event Cost"]
data = \
[[1, 0, 500]
[1, 0, 250]
[1, 1, 300]
[2, 0, 750]
[2, 1, 400]
[2, 1, 500]]
如何折叠此数组以汇总在相同事件位置发生的具有相同事件ID的条目的成本?最后将给我以下数组:
[[1, 0, 750]
[1, 1, 300]
[2, 0, 750]
[2, 1, 900]]
答案 0 :(得分:1)
这是itertools.groupby的经典用例:
import itertools
result = [
[i, loc, sum(cost for _, _, cost in costs)]
for (i, loc), costs in itertools.groupby(data, key=lambda t: (t[0], t[1]))
]
答案 1 :(得分:1)
我更喜欢两种方法:
numpy_indexed
软件包:import numpy as np
import numpy_indexed as npi
a = np.array([[1, 0, 500],[1, 0, 250],[1, 1, 300],[2, 0, 750],[2, 1, 400],[2, 1, 500]])
_, sums = npi.group_by(a[:,:2]).sum(a[:,2])
result = np.hstack([_, np.vstack(sums)])
print(result)
输出:
_ =
[[1 0],
[1 1],
[2 0],
[2 1]]
sums = [750, 300, 750, 900]
np.vstack(sums) =
[[750]
[300]
[750]
[900]]
result =
[[ 1 0 750]
[ 1 1 300]
[ 2 0 750]
[ 2 1 900]]
pandas
:df.groupby([0,1]).sum().reset_index().values
答案 2 :(得分:0)
我使用Pandas和以下代码来解决此问题:
selectSupplier(supplier){
this.props.Obj.supplier = supplier
}
render() {
//console.log("SUPPLIER", this.props)
return (
<div>
<button onClick={this.showMenu}>
Select Supplier
</button>
{
this.state.showMenu
? (
<div
className="menu"
ref={(element) => {
this.dropdownMenu = element;
}}
>
<button value="Husky" onClick={this.selectSupplier("Husky")}> Husky </button>
<button value="Shell" onClick={this.selectSupplier("Shell")}> Shell </button>
<button value="Ultramar" onClick={this.selectSupplier("Ultramar")}> Ultramar</button>
</div>
)
: (
null
)
}
</div>
);