如何在 pandas 中创建带有子列(下)的列

how to creat column with sub colum (under) in pandas

我有一个很长的数据 sheet 有很多问题。有许多问题有两个或更多答案,如下所示: [![问题格式 sheet][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

我想要输出结果如下: [![answer][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  

 

我还想在其他栏中增加一个“总计”栏和“是或否或电视的总计”,如上图所示。 谢谢大家的帮助。

编辑:第一列是一个问题(Q1 和 Q2)。下面几行是调查中不同人的答案。这是一个示例,供您理解。

这是一种可行的方法。您可以迭代每一列,计算该列中每个值的频率,并创建一个新的 multi-index dataframe:

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)

现在,让我们创建一个包含所有这些计数的数据框(每列一个)并旋转 table 以格式化输出:

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