📅  最后修改于: 2023-12-03 15:25:14.514000             🧑  作者: Mango
在 Pandas 中,交叉表(Crosstab)是一种用于计算各种统计信息的强大工具。它可以根据 DataFrame 中的两个或多个列来计算频率表或数量表。这对于对数据进行概括和可视化非常有用。但交叉表不总是适合用于数据分析,因为它具有比较平坦的结构。因此,将交叉表转换为“堆叠式”(Stacked)DataFrame则可以更好地利用该数据。
下面演示如何使用 Pandas 将交叉表转换为堆叠式 DataFrame。
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
使用 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
如果需要将多列转换为堆叠式 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,我们可以更好地利用数据进行分析和可视化。