1、创建数据透视表
使用pivot_table
方法可以创建数据透视表。这个方法非常灵活,允许指定不同的聚合函数、行列索引和值。
参考文档:Python pandas.DataFrame.pivot_table函数方法的使用
数据根据日期和类型进行了汇总,并计算了每个日期和类型组合的值总和。如下,
import pandas as pd # 示例数据 data = { 'Date': ['2020-01-01', '2020-01-01', '2020-01-02', '2020-01-02'], 'Type': ['A', 'B', 'A', 'B'], 'Value': [10, 15, 5, 7] } df = pd.DataFrame(data) # 创建数据透视表 pivot = pd.pivot_table(df, values='Value', index='Date', columns='Type', aggfunc='sum') print(pivot)
2、自定义聚合函数
可以使用自定义函数来执行更复杂的聚合操作。通常通过 groupby 方法结合 apply 函数来实现。apply 函数可以对分组数据应用任意函数,从而实现灵活的数据处理。
需要定义一个自定义函数,该函数将对分组的数据进行操作。这个函数可以执行任何计算,从简单的数学运算到复杂的逻辑。可以使用 groupby 方法对数据进行分组,并使用 apply 方法应用自定义函数。
参考文档:
Python pandas.DataFrame.pivot_table函数方法的使用
Python pandas.DataFrame.groupby函数方法的使用
Python pandas.DataFrame.apply函数方法的使用
1)聚合操作
import pandas as pd # 定义一个自定义函数计算范围(最大值 - 最小值) def range_function(x): return x.max() - x.min() # 创建一个示例 DataFrame df = pd.DataFrame({ 'Category': ['A', 'A', 'B', 'B', 'C', 'C'], 'Values': [10, 20, 15, 25, 30, 40] }) # 使用 groupby 和 apply result = df.groupby('Category')['Values'].apply(range_function) # 输出结果 print(result)
2)数据透视表聚合操作
import pandas as pd import numpy as np # 创建一个示例 DataFrame df = pd.DataFrame({ 'Category': ['A', 'A', 'B', 'B', 'C', 'C'], 'Subcategory': ['X', 'Y', 'X', 'Y', 'X', 'Y'], 'Values': [10, 20, 15, 25, 30, 40] }) # 定义一个自定义聚合函数 def custom_agg(x): # 计算平均值,但排除 NaN 值,并考虑空值 if len(x) == 0: return np.nan return np.nanmean(x) # 创建数据透视表,使用自定义聚合函数 pivot_table_custom_agg = df.pivot_table( values='Values', index='Category', columns='Subcategory', aggfunc=custom_agg # 应用自定义聚合函数 ) # 输出结果 print(pivot_table_custom_agg)
3、多个聚合函数
可以使用 groupby
方法对数据进行分组,并使用 agg 方法应用多个聚合函数。
参考文档:
Python pandas.DataFrame.pivot_table函数方法的使用
Python pandas.DataFrame.groupby函数方法的使用
Python pandas.DataFrame.agg函数方法的使用
1)多个聚合函数
import pandas as pd # 创建一个示例 DataFrame df = pd.DataFrame({ 'Category': ['A', 'A', 'B', 'B', 'C', 'C'], 'Values': [10, 20, 15, 25, 30, 40], 'Scores': [80, 90, 70, 60, 50, 40] }) # 使用 groupby 和 agg 应用多个聚合函数 result = df.groupby('Category').agg({ 'Values': ['mean', 'sum', 'max'], 'Scores': ['min', 'std'] }) # 输出结果 print(result)
2)数据透视表多个聚合函数
import pandas as pd import numpy as np # 创建一个示例 DataFrame df = pd.DataFrame({ 'Category': ['A', 'A', 'B', 'B', 'C', 'C'], 'Subcategory': ['X', 'Y', 'X', 'Y', 'X', 'Y'], 'Values': [10, 20, 15, 25, 30, 40] }) # 在数据透视表中应用多个聚合函数 pivot_table_multiple_agg = df.pivot_table( values='Values', index='Category', columns='Subcategory', aggfunc=[np.mean, np.sum, np.max] # 应用多个聚合函数 ) # 输出结果 print(pivot_table_multiple_agg)
4、填充缺失值
在创建数据透视表时,可以指定用来填充缺失值的值。
参考文档:Python pandas.DataFrame.pivot_table函数方法的使用
import pandas as pd import numpy as np # 创建一个示例 DataFrame,包含一些缺失值 df = pd.DataFrame({ 'Category': ['A', 'A', 'B', 'B', 'C', 'C'], 'Subcategory': ['X', 'Y', 'X', 'Y', 'X', 'Y'], 'Values': [10, np.nan, 15, 25, np.nan, 40] }) # 创建数据透视表 pivot_table = df.pivot_table( values='Values', index='Category', columns='Subcategory', aggfunc=np.sum ) # 填充缺失值 pivot_table_filled = pivot_table.fillna(0) # 输出结果 print(pivot_table_filled)
5、添加小计
在创建数据透视表时,可以使用margins=True
添加小计。
参考文档:Python pandas.DataFrame.pivot_table函数方法的使用
import pandas as pd import numpy as np # 创建一个示例 DataFrame df = pd.DataFrame({ 'Category': ['A', 'A', 'B', 'B', 'C', 'C'], 'Subcategory': ['X', 'Y', 'X', 'Y', 'X', 'Y'], 'Values': [10, 20, 15, 25, 30, 40] }) # 在数据透视表中添加小计(margins) pivot_table_with_margins = df.pivot_table( values='Values', index='Category', columns='Subcategory', aggfunc=np.sum, margins=True, # 添加小计 margins_name='Total' # 小计的名称 ) # 输出结果 print(pivot_table_with_margins)
6、多索引和多值
数据透视表还支持使用多个索引和/或聚合多个值列。
import pandas as pd import numpy as np # 创建一个包含多索引和多值的示例 DataFrame df_multi = pd.DataFrame({ 'Category': ['A', 'A', 'B', 'B', 'C', 'C'], 'Subcategory': ['X', 'Y', 'X', 'Y', 'X', 'Y'], 'Region': ['East', 'West', 'East', 'West', 'East', 'West'], 'Values': [10, 20, 15, 25, 30, 40], 'Scores': [80, 90, 70, 60, 50, 40] }) # 创建数据透视表,使用多索引和多值 pivot_table_multi_index = df_multi.pivot_table( values=['Values', 'Scores'], index=['Category', 'Subcategory'], columns='Region', aggfunc=np.mean ) # 输出结果 print(pivot_table_multi_index)