为了账号安全,请及时绑定邮箱和手机立即绑定

按总和条件分组

按总和条件分组

至尊宝的传说 2021-10-19 15:32:57
我有以下 df,我想按日期和参考对其进行分组,但具有总和条件。在这方面,仅当 P >= 比 PP 时,我才需要按日期和参考分组并汇总“Q”列。df = DataFrame({'Date' : ['1', '1', '1', '1'],                'Ref' : ['one', 'one', 'two', 'two'],                'P' : ['50', '65', '30', '38'],                'PP' : ['63', '63', '32', '32'],                'Q' : ['10', '15', '20', '10']})df.groupby(['Date','Ref'])['Q'].sum() #This does the right grouping byt summing the whole columndf.loc[df['P'] >= df['PP'], ('Q')].sum() #this has the right sum condition, but does not divide between Date & Ref有没有办法做到这一点?提前谢谢了
查看完整描述

2 回答

?
蝴蝶刀刀

TA贡献1801条经验 获得超8个赞

只需在分组之前过滤:


In[15]:

df[df['P'] >= df['PP']].groupby(['Date','Ref'])['Q'].sum()


Out[15]: 

Date  Ref

1     one    15

      two    10

Name: Q, dtype: object

这首先减少了 df 的大小,因此将加快 groupby 操作


查看完整回答
反对 回复 2021-10-19
?
紫衣仙女

TA贡献1839条经验 获得超15个赞

你可以这样做:


import pandas as pd


df = pd.DataFrame({'Date' : ['1', '1', '1', '1'],

                'Ref' : ['one', 'one', 'two', 'two'],

                'P' : ['50', '65', '30', '38'],

                'PP' : ['63', '63', '32', '32'],

                'Q' : ['10', '15', '20', '10']})


def conditional_sum(x):

    return x[x['P'] >= x['PP']].Q.sum()


result = df.groupby(['Date','Ref']).apply(conditional_sum)


print(result)

输出


Date  Ref

1     one    15

      two    10

dtype: object

更新


如果要对输出中的多列求和,可以使用loc:


def conditional_sum(x):

    return x.loc[x['P'] >= x['PP'], ['Q', 'P']].sum()



result = df.groupby(['Date', 'Ref']).apply(conditional_sum)


print(result)

输出


             Q     P

Date Ref            

1    one  15.0  65.0

     two  10.0  38.0

请注意,在上面的示例中,我使用 columnP是为了展示如何处理多列。


查看完整回答
反对 回复 2021-10-19
  • 2 回答
  • 0 关注
  • 162 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信