首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >计算Pandas中选定(多个)列中出现的总次数

计算Pandas中选定(多个)列中出现的总次数
EN

Stack Overflow用户
提问于 2021-01-08 20:01:30
回答 3查看 44关注 0票数 3

我想在多个列中总结类别值的出现情况,因此特定的类别值在多个列中出现的次数。

这是我的数据框架:

代码语言:javascript
复制
>>> import pandas as pd
>>> df = pd.DataFrame({'user_id': [1,2,3,4,5,6],
...                   'position_1':['abc', 'bbc', 'ccd', 'kpd', 'mne', 'jbp'],
...                   'position_2':['jkp', 'klp', 'abc', 'jbp', 'ccd', 'ppt'],
...                   'position_3':['abc', 'bbc', 'ytz', 'mne', 'ppt', 'jbp']})
>>> df
   user_id position_1 position_2 position_3
0        1        abc        jkp        abc
1        2        bbc        klp        bbc
2        3        ccd        abc        ytz
3        4        kpd        jbp        mne
4        5        mne        ccd        ppt
5        6        jbp        ppt        jbp

我想要的输出如下所示:

代码语言:javascript
复制
value           number of occurrences in selected columns
abc                                 4
jbp                                 3
bbc                                 2
ccd                                 2
and so on.

我尝试使用value_counts,但得到了一个令人困惑的结果:

代码语言:javascript
复制
df.value_counts(['position_1', 'position_2', 'position_3'])

position_1  position_2  position_3
mne         ccd         ppt           1
kpd         jbp         mne           1
jbp         ppt         jbp           1
ccd         abc         ytz           1
bbc         klp         bbc           1
abc         jkp         abc           1
dtype: int64
EN

回答 3

Stack Overflow用户

发布于 2021-01-08 20:04:09

value_counts应用于每一列,并沿第二个轴应用sum

代码语言:javascript
复制
res = df[['position_1', 'position_2', 'position_3']].apply(pd.Series.value_counts).fillna(0).sum(1).astype(int)
print(res)

输出

代码语言:javascript
复制
abc    3
bbc    2
ccd    2
jbp    3
jkp    1
klp    1
kpd    1
mne    2
ppt    2
ytz    1
dtype: int64
票数 3
EN

Stack Overflow用户

发布于 2021-01-08 20:04:58

GroupBy.size中使用DataFrame.melt

代码语言:javascript
复制
cols = ['position_1', 'position_2', 'position_3'] 
df = df[cols].melt().groupby('value').size().reset_index(name='count')
print (df)
  value  count
0   abc      3
1   bbc      2
2   ccd      2
3   jbp      3
4   jkp      1
5   klp      1
6   kpd      1
7   mne      2
8   ppt      2
9   ytz      1
票数 3
EN

Stack Overflow用户

发布于 2021-01-08 21:00:23

您可以使用方法meltvalue_counts

代码语言:javascript
复制
df.filter(like='position', axis=1).melt().value_counts('value')

输出:

代码语言:javascript
复制
abc    3
jbp    3
ppt    2
bbc    2
ccd    2
mne    2
ytz    1
kpd    1
klp    1
jkp    1
Name: value, dtype: int64
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/65628578

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档