我想检索两个groupby系列对象并相互计算。
下面的系列对象:
Cost
ID yy
312 13 102429.610000
361 15 170526.000000
373 14 400000.000000
403 13 165000.000000
14 165000.000000
15 183558.720000
16 133763.760980
17 121301.930160
Percentage
ID yy
312 13 21.687500
361 15 33.181818
373 14 12.439024
403 13 22.966667
14 22.966667
15 24.142857
16 23.333333
17 36.666667
cost=df.groupby(['ID', 'yy'])['cost']
percentage=df.groupby(['ID', 'yy'])['percentage']
我基本上想要计算成本*百分比。
这是如何正确完成的?该错误是*:' SeriesGroupBy'不支持的操作数类型。和' SeriesGroupBy'。
答案 0 :(得分:2)
这是你需要的吗?
pct.mul(cost)/100
Out[332]:
ID yy
312 13 22214.421669
361 15 56583.626963
373 14 49756.096000
403 13 37895.000550
14 37895.000550
15 44316.319281
16 31211.543783
17 44477.374796
Name: V, dtype: float64
答案 1 :(得分:2)
你正在使用groupby而没有任何聚合函数,它返回groupby对象,而不是一个系列。
你需要
cost = df1.set_index(['ID', 'yy'])['cost']
pct = df2.set_index(['ID', 'yy'])['cost']
cost.mul(pct/100)
ID yy
312 13 22214.421669
361 15 56583.626963
373 14 49756.096000
403 13 37895.000550
14 37895.000550
15 44316.319281
16 31211.543783
17 44477.374796
答案 2 :(得分:0)
你可以直接乘以成本和百分比,因为这里你的指数,即id和yy对于两个DF都是相同的。 所以
percentage.mul(cost) should work.
答案 3 :(得分:0)
将同一(分组)df中的两个系列视为两个不同的对象时犯了一个错误。所以就这样做:
with df.groupby(['ID', 'yy']) as dfg:
dfg['cost'] * dfg['percentage'] # you have to assign or write the output
你甚至可以将它减少到单行,如果你发布我可以发布的可重复数据。事实上正如@Neo所示,类似:
df.groupby(['ID', 'yy']).percentage.mul(cost)