40_Pandas中crosstab进行交叉制表(计算每个类别的出现次数和频率)

可以使用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/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球