数据透视表(pivot table)是一种用于对数据进行汇总和分析的工具。数据透视表可以帮助我们快速了解数据的整体情况,发现数据中的趋势和模式。数据透视表(Pivot Table)是一个非常有用的工具,它允许您对数据集进行重新排列和汇总。数据透视表能够提供多维度的数据汇总,是数据分析和探索性数据分析(EDA)的重要工具。

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)

推荐文档