python - 每个变量的堆栈和返回值计数?

标签 python pandas dataframe

我有一个数据框,记录了 19717 人通过多项选择题选择编程语言的 react 。第一列当然是受访者的性别,其余的是他们选择的选项。数据框如下所示,每个响应都记录为与列相同的名称。如果没有选择响应,则结果为 NaN .

ID     Gender              Python    Bash    R    JavaScript    C++
0      Male                Python    nan     nan  JavaScript    nan
1      Female              nan       nan     R    JavaScript    C++
2      Prefer not to say   Python    Bash    nan  nan           nan
3      Male                nan       nan     nan  nan           nan
我想要的是一个基于 Gender 返回计数的表.因此,如果 5000 名男性用 Python 编码,3000 名女性用 JS 编码,那么我应该得到这个:
Gender              Python    Bash    R    JavaScript    C++
Male                5000      1000    800  1500          1000
Female              4000      500     1500 3000          800
Prefer Not To Say   2000      ...   ...    ...           860
我已经尝试了一些选项:
df.iloc[:, [*range(0, 13)]].stack().value_counts()

Male                       16138
Python                     12841
SQL                         6532
R                           4588
Female                      3212
Java                        2267
C++                         2256
Javascript                  2174
Bash                        2037
C                           1672
MATLAB                      1516
Other                       1148
TypeScript                   389
Prefer not to say            318
None                          83
Prefer to self-describe       49
dtype: int64
这不是如上所述的要求。这可以在 Pandas 中完成吗?

最佳答案

您可以melt并使用 crosstab

df1 = pd.melt(df,id_vars=['ID','Gender'],var_name='Language',value_name='Choice')
df1['Choice'] = np.where(df1['Choice'] == df1['Language'],1,0)
final= pd.crosstab(df1['Gender'],df1['Language'],values=df1['Choice'],aggfunc='sum')

print(final)
Language              Bash  C++  JavaScript  Python  R
Gender                                              
Female                  0    1           1       0  1
Male                    0    0           1       1  0
Prefer not to say       1    0           0       1  0

关于python - 每个变量的堆栈和返回值计数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59033379/

相关文章:

c++ - python/c++ - 使用 cmake 编译共享库并使用 distutils 安装

python - Flask 在使用蓝图静态路由时为蓝图静态文件引发 404

python - 用python按列乘​​以两个矩阵

python - 使用 pandas 联合列值组

python - 将 Pandas 数据框中具有不同日期的较早行的值连接起来

python - 创建 dict 和 Exception 的子类

python - KD/Qtree 实现

python - 如何将 pandas 中的数字列转换为带逗号分隔符的字符串?

r - f(init, x[[i]]) 中的错误 : unused argument (x[[i]])

python - 在pandas中,可以使用asfreq来选择采样的具体时间吗?