Я опытный пользователь SQL и я новичок в Python и Pandas. У меня есть DataFrame.
import pandas as pd
data=[[1,100,'a'],[1,200,'b'],[2,300,'a'],[2,400,'a'],[3,500,'b'],[3,600,'a'],[3,700,'b']]
df=pd.DataFrame(data,columns=['Group','Amount','Condition'])
Можно ли рассчитать как условную сумму, так и «обычную» сумму за один шаг?
В принципе, в SQL это будет так.
select [Group]
,sum([Amount]) as Amount
,sum(case when [Condition]=’a’ then [Amount] end) as Conditional_Sum
from df
group by [Group]
Но в Пандах я разбил их на несколько шагов.
Для «обычной» суммы я использую
df1=df.groupby('Group')['Amount'].sum().reset_index()
Для условногосумма, я использую
df2=df.groupby('Group').apply(lambda x: x[x['Condition']=='a']['Amount'].sum()).to_frame(name='Conditional_Sum')
df2.reset_index(inplace=True)
Затем я объединяю df1 и df2. Могу ли я сделать это всего за один шаг?
Редактировать: чтобы уточнить, есть ли способ создать под фреймом данных один шаг?
Group Amount Conditional_Sum
0 1 300 100
1 2 700 700
2 3 1800 600