我有一份很长的数据表,里面有很多问题。有许多问题有两个或多个答案,如下所示:[![表格中的问题格式][1]][1]
Q:1 is there electricity in your home Q:2 What are the electric appliances in your home
yes tv
yes fridge
no laptop
no computer
yes tv
yes laptop
我希望输出结果如下:[![答案][2]][2]
Q:1 is there electricity in your home Q:2 What are the electric appliances in your home
total yes no total tv fridge laptop computer
6 4 2 6 2 1 2 1
我想要一个额外的";合计";和一个";"是"或"否"或"TV"的总和;如上图所示。谢谢大家的帮助。
编辑:第一列是一个问题(Q1和Q2(。以下几行是调查中不同人群的回答。这是一个供你理解的样本。
这是一种可能的方法。您可以迭代每一列,计算该列中每个值的频率,并创建一个新的多索引数据帧:
new_df = list()
for column in df:
column_count = df[column].value_counts().to_frame().stack()
column_count.loc[("total", column)] = column_count.sum()
new_df.append(column_count)
现在,让我们创建一个包含所有这些计数的数据帧(每列一个(,并透视表以格式化输出:
new_df = pd.concat(new_df).reset_index()
new_df = new_df.pivot_table(index=["level_1", "level_0"], values=0).T
这是带有示例输入的代码的输出:
# Sample input
Q1 Q2
0 yes tv
1 yes fridge
2 no laptop
3 no tv
# Sample output
level_1 Q1 Q2
level_0 no total yes fridge laptop total tv
0 2 4 2 1 1 4 2