在名称列中创建包含一些重复单元格值的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]})
我想继续创建另一个DataFrame,其中合并名称列中的重复值,不留下任何重复项。同时我想要 总结约翰所做的付款价值。我继续说:
df_sum = df.groupby('Name', axis=0).sum().reset_index()
但由于df.groupby('Name', axis=0).sum()
命令将sum函数应用于DataFrame中的每一列,因此也会处理持续时间(以分钟为单位的访问次数)列。相反,我想获得持续时间列的平均值。所以我需要使用mean()
方法,如下所示:
df_mean = df.groupby('Name', axis=0).mean().reset_index()
但是使用mean()
功能,付款列现在显示了John所做的平均付款值,而不是所有付款的总和。
如何创建一个DataFrame,其中Duration值显示平均值,而Payment值显示总和?
答案 0 :(得分:8)
您可以使用groupby.agg将不同的函数应用于不同的列:
df.groupby('Name').agg({'Duration': 'mean', 'Payment': 'sum'})
Out:
Payment Duration
Name
Alex 15 20
John 30 15
Will 15 30