Pandas是一个强大的Python库,用于数据处理和分析。其最常用的功能之一是分组数据并执行聚合计算。本文探讨了使用groupby()
方法高效计算分组数据后聚合和的方法,针对不同复杂程度和所需输出格式提供了多种解决方案。
目录:
使用groupby()
进行基本求和
分组后计算列总和最简单的方法是直接使用groupby()
和sum()
方法:
import pandas as pd
data = {'Group': ['A', 'A', 'B', 'B', 'B', 'A'],
'Value': [10, 20, 15, 5, 25, 30]}
df = pd.DataFrame(data)
# 按'Group'分组并对'Value'求和
grouped_sum = df.groupby('Group')['Value'].sum()
print(grouped_sum)
这简洁地生成了一个Series,包含每组’Value’的总和。
使用agg()
进行多重聚合
agg()
方法允许同时高效地计算多个聚合统计数据。当您需要的不只是总和时,这一点尤其有用:
import pandas as pd
data = {'Group': ['A', 'A', 'B', 'B', 'B', 'A'],
'Value': [10, 20, 15, 5, 25, 30]}
df = pd.DataFrame(data)
# 计算每组的总和、平均值和计数
aggregated = df.groupby('Group')['Value'].agg(['sum', 'mean', 'count'])
print(aggregated)
这一行代码计算了每组’Value’的总和、平均值和计数,结果是一个DataFrame。
使用apply()
进行自定义聚合
对于需要自定义聚合逻辑的更复杂场景,apply()
方法提供了最大的灵活性。您可以定义一个函数来执行任何所需的计算:
import pandas as pd
import numpy as np
data = {'Group': ['A', 'A', 'B', 'B', 'B', 'A'],
'Value': [10, 20, 15, 5, 25, 30]}
df = pd.DataFrame(data)
def custom_agg(x):
return pd.Series({'sum': x.sum(), 'range': x.max() - x.min()})
# 应用自定义聚合函数
result = df.groupby('Group')['Value'].apply(custom_agg).reset_index()
print(result)
在这里,自定义函数计算每组的总和和范围。
使用groupby()
和cumsum()
进行累积求和
要在每组内获得累积和,请将groupby()
与cumsum()
方法结合使用:
import pandas as pd
data = {'Group': ['A', 'A', 'B', 'B', 'B', 'A'],
'Value': [10, 20, 15, 5, 25, 30]}
df = pd.DataFrame(data)
# 计算每组的累积和
df['Cumulative Sum'] = df.groupby('Group')['Value'].cumsum()
print(df)
这会添加一个新列,显示每组内的运行总计。
使用pivot_table()
重塑数据
对于更直观且易于分析的聚合数据表示,尤其是在处理多个分组变量时,请使用pivot_table()
:
import pandas as pd
data = {'Group': ['A', 'A', 'B', 'B', 'B', 'A'],
'Category': ['X', 'Y', 'X', 'Y', 'Z', 'X'],
'Value': [10, 20, 15, 5, 25, 30]}
df = pd.DataFrame(data)
pivot_table = pd.pivot_table(df, values='Value', index='Group', columns='Category', aggfunc='sum', fill_value=0)
print(pivot_table)
这将创建一个汇总数据的透视表,使其更容易比较每组中不同类别间的总和。