如何在 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
我有一个很长的数据 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