使用Groupby对象计算Pandas

时间:2018-01-31 21:03:10

标签: 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    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'。

4 个答案:

答案 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)