猿问

按总和条件分组

我有以下 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 column

df.loc[df['P'] >= df['PP'], ('Q')].sum() #this has the right sum condition, but does not divide between Date & Ref

有没有办法做到这一点?提前谢谢了


至尊宝的传说
浏览 167回答 2
2回答

蝴蝶刀刀

只需在分组之前过滤:In[15]:df[df['P'] >= df['PP']].groupby(['Date','Ref'])['Q'].sum()Out[15]: Date  Ref1     one    15      two    10Name: Q, dtype: object这首先减少了 df 的大小,因此将加快 groupby 操作

紫衣仙女

你可以这样做:import pandas as pddf = 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  Ref1     one    15      two    10dtype: 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     PDate Ref            1    one  15.0  65.0     two  10.0  38.0请注意,在上面的示例中,我使用 columnP是为了展示如何处理多列。
随时随地看视频慕课网APP

相关分类

Python
我要回答