📜  将 Pandas 交叉表转换为 Stacked DataFrame(1)

📅  最后修改于: 2023-12-03 15:25:14.514000             🧑  作者: Mango

将 Pandas 交叉表转换为 Stacked DataFrame

在 Pandas 中,交叉表(Crosstab)是一种用于计算各种统计信息的强大工具。它可以根据 DataFrame 中的两个或多个列来计算频率表或数量表。这对于对数据进行概括和可视化非常有用。但交叉表不总是适合用于数据分析,因为它具有比较平坦的结构。因此,将交叉表转换为“堆叠式”(Stacked)DataFrame则可以更好地利用该数据。

下面演示如何使用 Pandas 将交叉表转换为堆叠式 DataFrame。

1. 利用 Pandas 创建 交叉表
import pandas as pd

# 创建示例 DataFrame
df = pd.DataFrame({
    'Gender': ['Male', 'Female', 'Male', 'Male', 'Female', 'Female', 'Male', 'Male', 'Female', 'Male'],
    'Age': ['Adult', 'Adult', 'Child', 'Child', 'Adult', 'Adult', 'Adult', 'Child', 'Adult', 'Child'],
    'Count': [1, 2, 3, 1, 2, 2, 1, 2, 2, 1]
})

# 转换为交叉表
cross_tab = pd.crosstab(df['Gender'], df['Age'], values=df['Count'], aggfunc='sum')
print(cross_tab)

输出:

Age     Adult  Child
Gender              
Female     6.0    2.0
Male       4.0    4.0
2. 将交叉表转换为堆叠式 DataFrame

使用 stack() 函数将交叉表转换为堆叠式 DataFrame:

stacked_df = cross_tab.stack().reset_index(name='Count')
print(stacked_df)

输出:

   Gender    Age  Count
0  Female  Adult    6.0
1  Female  Child    2.0
2    Male  Adult    4.0
3    Male  Child    4.0
3. 多列转换为堆叠式 DataFrame

如果需要将多列转换为堆叠式 DataFrame,可以指定 level 参数:

df = pd.DataFrame({
    'Gender': ['Male', 'Female', 'Male', 'Male', 'Female', 'Female', 'Male', 'Male', 'Female', 'Male'],
    'Age': ['Adult', 'Adult', 'Child', 'Child', 'Adult', 'Adult', 'Adult', 'Child', 'Adult', 'Child'],
    'City': ['Beijing', 'Beijing', 'Shanghai', 'Beijing', 'Shanghai', 'Shanghai', 'Beijing', 'Beijing', 'Shanghai', 'Beijing'],
    'Count': [1, 2, 3, 1, 2, 2, 1, 2, 2, 1]
})

cross_tab = pd.crosstab([df['Gender'], df['Age']], df['City'], values=df['Count'], aggfunc='sum')
stacked_df = cross_tab.stack(level=[0, 1]).reset_index(name='Count')
print(stacked_df)

输出:

   Gender    Age       City  Count
0  Female  Adult    Beijing      2
1  Female  Adult   Shanghai      4
2  Female  Child    Beijing      1
3  Female  Child   Shanghai      1
4    Male  Adult    Beijing      2
5    Male  Adult   Shanghai      1
6    Male  Child    Beijing      1
7    Male  Child   Shanghai      3

以上就是将 Pandas 交叉表转换为堆叠式 DataFrame 的示例。通过使用堆叠式 DataFrame,我们可以更好地利用数据进行分析和可视化。