首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Group By with sumproduct

Group By with sumproduct
EN

Stack Overflow用户
提问于 2019-02-04 03:20:17
回答 1查看 414关注 0票数 0

我正在使用具有以下结构的df:

代码语言:javascript
复制
df = DataFrame({'Date' : ['1', '1', '1', '1'],
            'Ref' : ['one', 'one', 'two', 'two'],
            'Price' : ['50', '65', '30', '35'],
            'MktPrice' : ['63', '63', '32', '32'],
            'Quantity' : ['10', '15', '20', '10'],
            'MarketQuantity': ['50', '50', '100', '100'],
            'Weightings' : ['2', '2', '4', '4'],
            'QxWeightings' : ['20', '30', '80', '40'],
            'MktQxWeightings': ['100', '100', '400', '400'],
            })   

当价格高于Mkt价格时,我已经设法获得了代表我的MarketQuantity数量的加权百分比(并按日期和参考显示)

代码语言:javascript
复制
def percentage(x):
    return (x.loc[x['Price'] >= x['MktPrice'], ['QxWeightings']].sum()/(x['MktQxWeightings'].sum()/len(x)))

df.groupby(['Date', 'Ref']).apply(percentage)

Date  Ref   Output 
1     one   0.3
1     two   0.1

但是,当我尝试仅按日期对其进行分组时,我得到:

代码语言:javascript
复制
Date  Output 
1     0.4

这是之前输出的总和,而它应该是0.14 (30+40)/(100+400)。

我怎样才能用groupby做到这一点?非常感谢你提前

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-02-04 03:42:29

IIUC,可能是这样的:

代码语言:javascript
复制
def percentage(x):
    return (x.loc[x['Price'] >= x['MktPrice'], ['QxWeightings']].sum()/(x['MktQxWeightings'].sum()/len(x)))

df_new=df.groupby(['Date', 'Ref','MktQxWeightings']).apply(percentage).reset_index()
print(df_new)

  Date  Ref  MktQxWeightings  QxWeightings
0    1  one              100           0.3
1    1  two              400           0.1

df_new.groupby('Date')['MktQxWeightings','QxWeightings'].apply(lambda x: x['QxWeightings'].\
                                                           cumsum().sum()*100/x['MktQxWeightings'].sum())

Date
1    0.14
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/54506614

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档