Python 使用Groupby对象进行计算
我想检索两个groupby系列对象,并在它们之间进行计算 系列对象如下:Python 使用Groupby对象进行计算,python,pandas,Python,Pandas,我想检索两个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
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”的操作数类型。这是您需要的吗
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
这是你需要的吗
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
您使用的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
您使用的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
您可以直接将成本和百分比相乘,因为这里您的指数,即id和yy对于两个DF都是相同的。 所以
您可以直接将成本和百分比相乘,因为这里您的指数,即id和yy对于两个DF都是相同的。 所以
将来自相同(分组)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)
将来自相同(分组)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)
不,这两个系列都来自同一个df。因此,您只需执行
df.groupby(['ID',yy'])
@smci,这里的成本和百分比是问题中指定的两个不同的数据帧不,它们都来自相同的分组df:df.groupby(['ID',yy'])
。不,这两个系列都来自相同的df。所以你只需要做df.groupby(['ID',yy'])
@smci,这里的成本和百分比是问题中指定的两个不同的数据帧不,它们都来自同一个分组df:df.groupby(['ID',yy'])
。你把来自同一(分组)df的两个系列视为两个不同的对象,这让事情变得更难了。而是执行df.groupby(['ID','yy'])
并保存分组的df(或将其与上下文管理器一起使用)。看到我的回答了吗?你把来自同一个(分组)df的两个系列视为两个不同的对象,这让事情变得更难了。而是执行df.groupby(['ID','yy'])
并保存分组的df(或将其与上下文管理器一起使用)。看到我的答案了吗