我想在多个列中总结类别值的出现情况,因此特定的类别值在多个列中出现的次数。
这是我的数据框架:
>>> 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我想要的输出如下所示:
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发布于 2021-01-08 20:04:09
将value_counts应用于每一列,并沿第二个轴应用sum:
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发布于 2021-01-08 20:04:58
在GroupBy.size中使用DataFrame.melt
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发布于 2021-01-08 21:00:23
您可以使用方法melt和value_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: int64https://stackoverflow.com/questions/65628578
复制相似问题