可以使用pandas.crosstab()函数完成交叉表分析。 可以为每个类别的分类数据(分类数据,定性数据)计算样本数(出现次数/频率)。
如果要计算每个类别的平均值而不是出现次数,请使用数据透视表pandas.pivot_table()。
这里,
- pandas.crosstab()函数的基本用法
- 计算每个类别的小计/总计:参数margins
- 标准化整个/行/列:参数normalize
将予以描述。 将以泰坦尼克号的生存信息数据为例。
import pandas as pd
df = pd.read_csv('./data/40/train.csv', index_col=0).drop(['Name', 'Ticket', 'SibSp', 'Parch'], axis=1)
print(df.head())
在第一个参数索引中指定pandas.DataFrame列(= pandas.Series)作为结果行标题,在第二个参数列中指定pandas.DataFrame列(= pandas.Series)作为结果列标题。
注意,与pandas.pivot_table()不同,它不是由pandas.DataFrame对象及其列名指定的。
print(pd.crosstab(df['Sex'], df['Pclass']))
pandas.crosstab()函数返回pandas.DataFrame。
print(type(pd.crosstab(df['Sex'], df['Pclass'])))
还可以在参数索引和列中指定pandas.Series的列表。结果以多索引(分层索引)pandas.DataFrame的形式返回。
print(pd.crosstab([df['Sex'], df['Survived']], [df['Pclass'], df['Embarked']]))
请参阅以下文章,了解如何选择多索引pandas.DataFrame的行和列。
如果参数margin为True,则可以计算每个类别的小计和总计。
print(pd.crosstab([df['Sex'], df['Survived']], [df['Pclass'], df['Embarked']],
margins=True))
可以通过参数margins_name指定小计/总行标签/列标签。默认为”all”。
print(pd.crosstab([df['Sex'], df['Survived']], [df['Pclass'], df['Embarked']],
margins=True, margins_name='Total'))
指定参数normalize时,可以对整个,行和列的结果进行1归一化(归一化)。 如果normalize = True或normalize =’all’,则将其标准化以使总数为1。
print(pd.crosstab(df['Sex'], df['Pclass'], margins=True, normalize=True))
如果normalize =’index’,则将其标准化,以使每行的总数为1。
print(pd.crosstab(df['Sex'], df['Pclass'], margins=True, normalize='index'))
如果normalize =’columns’,则将其标准化,以使每列的总数为1。
print(pd.crosstab(df['Sex'], df['Pclass'], margins=True, normalize='columns'))
请注意,如果在列表中为参数margins = True和参数索引和列指定了多列,则如果在指定方向上对多索引进行标准化,则会发生错误。
print(pd.crosstab(df['Sex'], [df['Pclass'], df['Embarked']],
margins=True, normalize='index'))
如果margins = False(默认值),则没有问题。
print(pd.crosstab(df['Sex'], [df['Pclass'], df['Embarked']], normalize=True))
print(pd.crosstab(df['Sex'], [df['Pclass'], df['Embarked']], normalize='index'))
print(pd.crosstab(df['Sex'], [df['Pclass'], df['Embarked']], normalize='columns'))
Original: https://blog.csdn.net/qq_18351157/article/details/115627992
Author: 饺子大人
Title: 40_Pandas中crosstab进行交叉制表(计算每个类别的出现次数和频率)
原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/740341/
转载文章受原作者版权保护。转载请注明原作者出处!