首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何获取具有原始索引顺序的序列在值偏好后的pandas序列值计数

如何获取具有原始索引顺序的序列在值偏好后的pandas序列值计数
EN

Stack Overflow用户
提问于 2020-08-13 04:31:31
回答 2查看 43关注 0票数 0

下面我给出一个例子:

代码语言:javascript
运行
复制
a = ['Ibrutinib', 'Ibrutinib', 'Ibrutinib',
       'Ibrutinib-containing product', 'Ibrutinib 140 MG',
       'Ibrutinib Oral Product',
       'Ibrutinib-containing product in oral dose form', 'Ibrutinib Pill',
       'Ibrutinib Oral Capsule', 'Ibrutinib 140 MG Oral Capsule',
       'Ibrutinib 140 MG [Imbruvica]',
       'Ibrutinib Oral Capsule [Imbruvica]',
       'Ibrutinib 140 MG Oral Capsule [Imbruvica]']

pd.Series(a).value_counts()

%%out%%
Ibrutinib                                         3
Ibrutinib-containing product in oral dose form    1
Ibrutinib Pill                                    1
Ibrutinib Oral Product                            1
Ibrutinib 140 MG Oral Capsule [Imbruvica]         1
Ibrutinib 140 MG Oral Capsule                     1
Ibrutinib Oral Capsule                            1
Ibrutinib-containing product                      1
Ibrutinib 140 MG [Imbruvica]                      1
Ibrutinib 140 MG                                  1
Ibrutinib Oral Capsule [Imbruvica]                1
dtype: int64

我希望看到“易卜拉替尼140毫克”在3个位置,因为它在原来的系列中领先。

EN

回答 2

Stack Overflow用户

发布于 2020-08-13 06:37:03

要按原始列表排序,请将其转换为数据帧,然后创建一个排序依据的排名列。

代码语言:javascript
运行
复制
import pandas as pd

a = ['Ibrutinib', 'Ibrutinib', 'Ibrutinib',
       'Ibrutinib-containing product', 'Ibrutinib 140 MG',
       'Ibrutinib Oral Product',
       'Ibrutinib-containing product in oral dose form', 'Ibrutinib Pill',
       'Ibrutinib Oral Capsule', 'Ibrutinib 140 MG Oral Capsule',
       'Ibrutinib 140 MG [Imbruvica]',
       'Ibrutinib Oral Capsule [Imbruvica]',
       'Ibrutinib 140 MG Oral Capsule [Imbruvica]']


s = pd.Series(a).value_counts()
df = s.rename_axis('value').reset_index(name='count')   # convert to dataframe
df["rank"] = df['value'].apply(lambda x : a.index(x))   # create rank column, ranked by list index 
dfsrt = df.sort_values(by='rank')                       # sort by rank
print(dfsrt[['value','count']].to_string(index=False, justify='left',  # display value and count
     formatters={'value':'{{:<{}s}}'.format(dfsrt['value'].str.len().max()).format}))

输出

代码语言:javascript
运行
复制
 value                                           count
 Ibrutinib                                       3
 Ibrutinib-containing product                    1
 Ibrutinib 140 MG                                1
 Ibrutinib Oral Product                          1
 Ibrutinib-containing product in oral dose form  1
 Ibrutinib Pill                                  1
 Ibrutinib Oral Capsule                          1
 Ibrutinib 140 MG Oral Capsule                   1
 Ibrutinib 140 MG [Imbruvica]                    1
 Ibrutinib Oral Capsule [Imbruvica]              1
 Ibrutinib 140 MG Oral Capsule [Imbruvica]       1
票数 1
EN

Stack Overflow用户

发布于 2020-08-13 05:57:00

试一试

代码语言:javascript
运行
复制
df = pd.Dataframe(a)
df = df.groupby(0, sort=False).size()\
    .sort_values('size', ascending=False, kind='mergesort')

默认情况下,Value_counts对快速排序进行排序,但这并不能保证排序的稳定性。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/63384321

复制
相关文章

相似问题

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