我有一个像这样的数据框架
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