Python 3.6:创建数据透视表 table 汇总数据框中多列的值计数
Python 3.6: Creating a pivot table summarizing counts of values for multiple columns in dataframe
我有以下数据框:
df = pd.DataFrame({'X': ['Agree', 'Disagree', 'Agree', 'Neutral', 'Agree','Neutral'],
'Y': ['Disagree', 'Neutral', 'Agree', 'Disagree', 'Agree', 'Neutral'],
'Z': ['Agree', 'Neutral', 'Neutral', 'Disagree', 'Neutral','Neutral']})
我想创建一个 table 汇总每个类别(列)X、Y 和 'Agree'、'Neutral' 和 'Disagree' 的计数Z.
输出应如下所示:
df_answer = pd.DataFrame({'Response': ['Agree', 'Neutral', 'Disagree'],
'X': [3,2,1],
'Y': [2,2,2],
'Z': [1,4,1]})
我试图找到这个问题的答案,但似乎找不到专门解决这个问题的答案。
我希望有一个单独的索引,但如果 'Response' 是索引也可以,如果这样更容易的话。
我不确定如何使用 pivot_table 执行此操作,但如果有帮助,无需以下内容即可轻松实现:
out = pd.DataFrame()
for col in df.columns:
out = out.append(df[col].value_counts())
out = out.transpose()
X Y Z
Agree 3.0 2.0 1.0
Disagree 1.0 2.0 1.0
Neutral 2.0 2.0 4.0
如果需要,您还可以根据索引命名 'Response' 列
我们可以使用DataFrame.apply
+ pd.value_counts
:
new_df=df.apply(pd.value_counts)
print(new_df)
X Y Z
Agree 3 2 1
Disagree 1 2 1
Neutral 2 2 4
我们还可以:
df2=df.melt()
new_df=pd.crosstab(df2['value'],df2['variable'])
print(new_df)
variable X Y Z
value
Agree 3 2 1
Disagree 1 2 1
Neutral 2 2 4
我有以下数据框:
df = pd.DataFrame({'X': ['Agree', 'Disagree', 'Agree', 'Neutral', 'Agree','Neutral'],
'Y': ['Disagree', 'Neutral', 'Agree', 'Disagree', 'Agree', 'Neutral'],
'Z': ['Agree', 'Neutral', 'Neutral', 'Disagree', 'Neutral','Neutral']})
我想创建一个 table 汇总每个类别(列)X、Y 和 'Agree'、'Neutral' 和 'Disagree' 的计数Z.
输出应如下所示:
df_answer = pd.DataFrame({'Response': ['Agree', 'Neutral', 'Disagree'],
'X': [3,2,1],
'Y': [2,2,2],
'Z': [1,4,1]})
我试图找到这个问题的答案,但似乎找不到专门解决这个问题的答案。
我希望有一个单独的索引,但如果 'Response' 是索引也可以,如果这样更容易的话。
我不确定如何使用 pivot_table 执行此操作,但如果有帮助,无需以下内容即可轻松实现:
out = pd.DataFrame()
for col in df.columns:
out = out.append(df[col].value_counts())
out = out.transpose()
X Y Z
Agree 3.0 2.0 1.0
Disagree 1.0 2.0 1.0
Neutral 2.0 2.0 4.0
如果需要,您还可以根据索引命名 'Response' 列
我们可以使用DataFrame.apply
+ pd.value_counts
:
new_df=df.apply(pd.value_counts)
print(new_df)
X Y Z
Agree 3 2 1
Disagree 1 2 1
Neutral 2 2 4
我们还可以:
df2=df.melt()
new_df=pd.crosstab(df2['value'],df2['variable'])
print(new_df)
variable X Y Z
value
Agree 3 2 1
Disagree 1 2 1
Neutral 2 2 4