如何在数据框应用Series.value_counts()?

问题描述 投票:2回答:2

在一个数据帧我想计数每一列的值,并使用该值作为指标。

我想关闭这个:

Q1                   Q2                  Q3
Strongly agree       Agree               Undecided
Undecided            Agree               More or less disagree
Strongly agree       Agree               Undecided
Strongly agree       Strongly Disagree   Disagree
More or less agree   Undecided           Strongly disagree

这个:

                        Q1  Q2  Q3
Strongly agree          3   0   0
Agree                   0   3   0
More or less agree      1   0   0
Undecided               1   1   2
More or less disagree   0   0   1
Disagree                0   0   1
Strongly disagree       0   1   1

这怎么可能有熊猫吗?

python pandas dataframe
2个回答
3
投票

如果你坚持value_counts,您可以使用stackgroupby事先然后value_counts之前调用unstacking

df.stack().groupby(level=[1]).value_counts().unstack(0, fill_value=0)

                       Q1  Q2  Q3
Agree                   0   3   0
Disagree                0   0   1
More or less agree      1   0   0
More or less disagree   0   0   1
Strongly Disagree       0   1   0
Strongly agree          3   0   0
Strongly disagree       0   0   1
Undecided               1   1   2

另一种选择是使用meltpivot_table

(df.melt()
   .pivot_table(columns='variable', index='value', aggfunc='size', fill_value=0))

variable               Q1  Q2  Q3
value                            
Agree                   0   3   0
Disagree                0   0   1
More or less agree      1   0   0
More or less disagree   0   0   1
Strongly Disagree       0   1   0
Strongly agree          3   0   0
Strongly disagree       0   0   1
Undecided               1   1   2

解决方案使用crosstab

v = df.melt()
pd.crosstab(v['value'], v['variable'])

variable               Q1  Q2  Q3
value                            
Agree                   0   3   0
Disagree                0   0   1
More or less agree      1   0   0
More or less disagree   0   0   1
Strongly Disagree       0   1   0
Strongly agree          3   0   0
Strongly disagree       0   0   1
Undecided               1   1   2

2
投票

您可以将pd.Series.value_counts功能对整个数据框,并填写NaN值0。

df.apply(pd.Series.value_counts,axis=0).fillna(0)
© www.soinside.com 2019 - 2024. All rights reserved.