如何在 Python 中的数据框中创建两列的交叉表并在输出中生成总行和总列?
How can I create a cross-tab of two columns in a dataframe in Python and generate a total row and column in the output?
我已经从 CSV 文件创建了一个数据框,现在我正在尝试创建一个包含两列(“Personal_Status”和“性别”)的交叉表。输出应如下所示:Crosstab of Gender and Personal Status 包括每个 gender/personal 状态组合的频率以及每个生成的行和列的总数。
我试过 creditData[["Personal_Status", "Gender"]].value_counts()
但它不是我想要的。输出包括每个“Personal_Status”值的列、“性别”列和每个组合的频率,即第 1 行 =“Single, M, 232”
非常感谢任何见解。
是这样的吗?
import pandas as pd
df = pd.DataFrame({'Name':['Kathy', 'Linda', 'Peter'],
'Gender': ['F','F','M'],
'Personal_Status':['Divorced','Married','Married']})
df2 = pd.crosstab(df.Personal_Status, df.Gender)
df2.loc['Grand Total']= df2.sum(numeric_only=True, axis=0)
df2.loc[:,'Grand Total'] = df2.sum(numeric_only=True, axis=1)
print(df2)
输出
Gender F M Grand Total
Personal_Status
Divorced 1 0 1
Married 1 1 2
Grand Total 2 1 3
好吧,这在很大程度上取决于数据集的当前形状。
您应该按他们的个人状态和性别对您的数据进行分组,然后 summarize/aggregate 计算每个类别的成员。
在这种情况下,如果您只有地位和性别,请尝试这样的事情。
df = pd.DataFrame({'Name':['Kathy', 'Linda', 'Peter'],
'Gender': ['F','F','M'],
'Personal_Status':['Divorced','Married','Married']})
df2 = df.groupby(by=['Personal_Status','Gender'],as_index=False).count()
df3 = df2.pivot(index='Personal_Status',columns='Gender')
df3
Gender F M
Personal_Status
Divorced 1.0 NaN
Married 1.0 1.0
假设数据帧生成为:
import pandas as pd
df = pd.DataFrame({'Name':['Kathy', 'Linda', 'Peter'],
'Gender': ['F','F','M'],
'Personal_Status':['Divorced','Married','Married']})
这一行将产生请求的输出:
pd.crosstab(df.Personal_Status, df.Gender, margins=True, margins_name='Grand Total')
输出
Gender F M Grand Total
Personal_Status
Divorced 1 0 1
Married 1 1 2
Grand Total 2 1 3
这比给出的答案稍微简单一些。
我已经从 CSV 文件创建了一个数据框,现在我正在尝试创建一个包含两列(“Personal_Status”和“性别”)的交叉表。输出应如下所示:Crosstab of Gender and Personal Status 包括每个 gender/personal 状态组合的频率以及每个生成的行和列的总数。
我试过 creditData[["Personal_Status", "Gender"]].value_counts()
但它不是我想要的。输出包括每个“Personal_Status”值的列、“性别”列和每个组合的频率,即第 1 行 =“Single, M, 232”
非常感谢任何见解。
是这样的吗?
import pandas as pd
df = pd.DataFrame({'Name':['Kathy', 'Linda', 'Peter'],
'Gender': ['F','F','M'],
'Personal_Status':['Divorced','Married','Married']})
df2 = pd.crosstab(df.Personal_Status, df.Gender)
df2.loc['Grand Total']= df2.sum(numeric_only=True, axis=0)
df2.loc[:,'Grand Total'] = df2.sum(numeric_only=True, axis=1)
print(df2)
输出
Gender F M Grand Total
Personal_Status
Divorced 1 0 1
Married 1 1 2
Grand Total 2 1 3
好吧,这在很大程度上取决于数据集的当前形状。 您应该按他们的个人状态和性别对您的数据进行分组,然后 summarize/aggregate 计算每个类别的成员。 在这种情况下,如果您只有地位和性别,请尝试这样的事情。
df = pd.DataFrame({'Name':['Kathy', 'Linda', 'Peter'],
'Gender': ['F','F','M'],
'Personal_Status':['Divorced','Married','Married']})
df2 = df.groupby(by=['Personal_Status','Gender'],as_index=False).count()
df3 = df2.pivot(index='Personal_Status',columns='Gender')
df3
Gender F M
Personal_Status
Divorced 1.0 NaN
Married 1.0 1.0
假设数据帧生成为:
import pandas as pd
df = pd.DataFrame({'Name':['Kathy', 'Linda', 'Peter'],
'Gender': ['F','F','M'],
'Personal_Status':['Divorced','Married','Married']})
这一行将产生请求的输出:
pd.crosstab(df.Personal_Status, df.Gender, margins=True, margins_name='Grand Total')
输出
Gender F M Grand Total
Personal_Status
Divorced 1 0 1
Married 1 1 2
Grand Total 2 1 3
这比