我正在熊猫python中执行一些任务。
我有一个这样的数据:
col1 |col2 |col3 |col4 |col5 | col6
delhi |assam |"f" |78.3 |87.1 | B2C
delhi |goa |"f" |78.3 |87.1 | B2C
delhi |goa |"f" |78.3 |87.1 | B2C
delhi |assam |"f" |78.3 |87.1 | B2C
up |assam |"f" |78.3 |87.1 | B2B
delhi |assam |"f" |78.3 |87.1 | B2B
现在我想过滤那些col6是B2C的行。过滤后,我想按col1和col2分组,并对col4和col5求和。
所以输出应该像:
col1 |col2 |col3 |col4 |col5 | col6
delhi |assam |"f" |156.6|174.2| B2C
delhi |goa |"f" |156.6|174.2| B2C
up |assam |"f" |78.3 |87.1 | B2B
delhi |assam |"f" |78.3 |87.1 | B2B
我尝试过的方法:
df.loc[df['col6'] == 'B2C'].groupby(['col1', 'col2']).agg({'col4':'sum', 'col5':'sum'})
但我不知道如何将这个结果附加到原始数据帧中。如果我能做得更好,也要指导我。
IIUC,有一种方法:
df = df.groupby(['col1', 'col2', 'col3','col6'], sort=False).sum().reset_index()
注意:如果您只想执行聚合,其中col6
中的值为eq('B2C')
:
df = pd.concat([df[df.col6.eq('B2C')].groupby(['col1', 'col2', 'col3'],sort=False).sum().reset_index().assign(col6 = 'B2C'), df[df.col6.ne('B2C')]])
输出:
col1 col2 col3 col6 col4 col5
0 delhi assam f B2C 156.6 174.2
1 delhi goa f B2C 156.6 174.2
2 up assam f B2B 78.3 87.1
3 delhi assam f B2B 78.3 87.1