如何求和并表示一个DataFrame来创建另一个DataFrame

alp*_*ric 6 python dataframe pandas

在列名称中创建具有一些重复单元格值的DataFrame后:

import pandas as pd
df = pd.DataFrame({'Name': ['Will','John','John','John','Alex'],
                   'Payment':  [15, 10, 10, 10, 15],
                   'Duration':    [30, 15, 15, 15, 20]})
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述

我想继续创建另一个DataFrame,其中合并Name列中的重复值,不留下任何重复项.与此同时,我想总结约翰所做的付款价值.我继续说:

df_sum = df.groupby('Name', axis=0).sum().reset_index()
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述

但由于df.groupby('Name', axis=0).sum()命令将sum函数应用于DataFrame中的每一列,因此也会处理持续时间(以分钟为单位的访问时间)列.相反,我想获得持续时间列的平均值.所以我需要使用mean()方法,如下所示:

df_mean = df.groupby('Name', axis=0).mean().reset_index()
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述

但是,通过mean()功能,付款列现在显示了John所做的平均付款金额,而不是所有付款的总和.

如何创建一个DataFrame,其中Duration值显示平均值,而Payment值显示总和?

ayh*_*han 8

您可以使用groupby.agg将不同的函数应用于不同的列:

df.groupby('Name').agg({'Duration': 'mean', 'Payment': 'sum'})
Out: 
      Payment  Duration
Name                   
Alex       15        20
John       30        15
Will       15        30
Run Code Online (Sandbox Code Playgroud)