在Pandas中选择(多个)列并计算它们的总出现次数

3

我希望能够总结多个列中分类值的发生情况,并得出特定分类值在多个列中出现的次数。

以下是我的数据框:

>>> 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

My desired output would look something like this:

value           number of occurrences in selected columns
abc                                 4
jbp                                 3
bbc                                 2
ccd                                 2
and so on.

我尝试使用value_counts,但结果很令人困惑:
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
3个回答

3

value_counts应用于每一列,沿第二轴求和

res = df[['position_1', 'position_2', 'position_3']].apply(pd.Series.value_counts).fillna(0).sum(1).astype(int)
print(res)

输出

abc    3
bbc    2
ccd    2
jbp    3
jkp    1
klp    1
kpd    1
mne    2
ppt    2
ytz    1
dtype: int64

3

使用 DataFrame.meltGroupBy.size

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

1
你可以使用方法meltvalue_counts
df.filter(like='position', axis=1).melt().value_counts('value')

输出:

abc    3
jbp    3
ppt    2
bbc    2
ccd    2
mne    2
ytz    1
kpd    1
klp    1
jkp    1
Name: value, dtype: int64

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接