gpt4 book ai didi

python - 如何以列的形式获取所有选择(例如,来自调查)的计数

转载 作者:行者123 更新时间:2023-12-01 01:44:15 24 4
gpt4 key购买 nike

首先我要说的是,我是 pandas 的初学者。我有一个问题,我的初始数据框如下所示。对于每个问题,我们都会记录 3 个答案(是、否或为什么)。

df = pd.DataFrame({'Qn1' : ['Yes', 'No', 'Why', 'No', 'Yes', 'No'],
'Qn2' : ['No', 'No', 'Yes', 'Why', 'Why', 'Yes'],
'Qn3' : ['Why', 'Why', 'Why', 'Yes', 'Yes', 'No'],
'Qn4' : ['No', 'No', 'No', 'Yes', 'Yes', 'Why'],
})

我们如何获得一个数据框,其中包含针对问题的每个答案的计数。例如:一个类似于下面的 df

.   Yes  No  Why
Qn1 5 2 1
Qn2 1 3 6
Qn3 0 4 2
Qn4 4 2 1

groupby() 适用于列,但无法适用于行。

最佳答案

您可以将applypd.value_counts结合使用:

df.apply(pd.value_counts).T

No Why Yes
Qn1 3 1 2
Qn2 2 2 2
Qn3 1 3 2
Qn4 3 1 2

如果您有缺失值,这将用 NaN 填充,因此您可能希望fillna(如果有可能的话):

df = pd.DataFrame({'Qn1': ['Yes'], 'Qn2': ['No'], 'Qn3': ['Why']})
df.apply(pd.value_counts).T

No Why Yes
Qn1 NaN NaN 1.0
Qn2 1.0 NaN NaN
Qn3 NaN 1.0 NaN

# With fillna()
df.apply(pd.value_counts).T.fillna(0).astype(int)

No Why Yes
Qn1 0 0 1
Qn2 1 0 0
Qn3 0 1 0

如果并非所有项目都在任何列中,您可能需要定义CategoricalDtype:

df = pd.DataFrame({'Qn1': ['Yes'], 'Qn2': ['No'], 'Qn3': ['No']})
df.apply(pd.value_counts).T.fillna(0).astype(int)

# Missing 'why'
No Yes
Qn1 0 1
Qn2 1 0
Qn3 1 0

但是使用CategoricalDtype:

from pandas.api.types import CategoricalDtype

ct_type = CategoricalDtype(categories=['Yes', 'No', 'Why'], ordered=False)

df.astype(ct_type).apply(pd.value_counts).T.fillna(0).astype(int)

No Why Yes
Qn1 0 0 1
Qn2 1 0 0
Qn3 1 0 0

关于python - 如何以列的形式获取所有选择(例如,来自调查)的计数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51569043/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com