对单个列进行分组并应用sum、divide、round函数,并在其他列上应用聚合器



我有一个像这样的数据框架

df1 = pd.DataFrame([['a',1,100],['b',2,300],['c',3,400]],columns = ['col1','col2','col3'])

需要输出

summary_df = df1.groupby('col1').agg({'col2':'sum','col3':'sum'}).reset_index() #line1
summary_df['col3'] = round(summary_df['col3']/1000,2)

可以在line1中进行除法和舍入函数吗?本身。我还有很多列要做。因此,每列加一行不是一个好主意。

您还可以将lambda函数作为聚合传递,并针对特定的列执行特定于列的函数。

>>> df1.groupby('col1').agg({'col2':'sum','col3':lambda x:round(x.sum()/1000,2)})
col2  col3
col1            
a        1   0.1
b        2   0.3
c        3   0.4

如果您需要多次应用同一个函数,最好创建一个普通函数,并将其用于多个列,而不是使用lambda:

def func(x):
return round(x.sum()/1000,2)
df1.groupby('col1').agg({'col2':'sum','col3':func})
col2  col3
col1            
a        1   0.1
b        2   0.3
c        3   0.4

是的,你可以使用assign。

summary_df = (df1.groupby('col1')  
.agg({'col2':'sum','col3':'sum'})  
.reset_index()  
.assign(col3=lambda x: round(x['col3']/1000,2))) #line1  

最新更新