如何从列元素序列获取唯一值及按前缀统计Ticket_No列值计数
Pandas 实用问题解答
嘿,这两个Pandas的问题我来给你拆解清楚!
问题1:如何从DataFrame某一列的元素序列中获取唯一值?
有几种常用方法,你可以根据需求选:
用
unique()方法:直接返回该列的唯一值数组(numpy.ndarray类型),顺序是元素第一次出现的顺序。举个例子:import pandas as pd df = pd.DataFrame({'col': ['a', 'b', 'a', 'c', 'b']}) unique_vals = df['col'].unique() # 输出:array(['a', 'b', 'c'], dtype=object)用
drop_duplicates()方法:返回一个去掉重复值的Pandas Series,保留原有的索引结构,后续做Pandas操作更方便:unique_series = df['col'].drop_duplicates() # 输出: # 0 a # 1 b # 3 c # Name: col, dtype: object如果只是想统计唯一值的数量,直接用
nunique():unique_count = df['col'].nunique() # 输出:3
问题2:按Ticket_No的前缀统计数量
你提到的groupby().size()是核心操作,但需要先把每个Ticket_No的前缀提取出来再分组。这里分两种场景处理:
场景1:前缀是固定长度(比如你的例子里都是前3个字符)
直接截取字符串的前3位,然后分组统计就行:
# 假设你的DataFrame叫df prefix_counts = df.groupby(df['Ticket_No'].str[:3]).size() # 或者先建一个前缀列,逻辑更直观 df['Prefix'] = df['Ticket_No'].str[:3] prefix_counts = df.groupby('Prefix').size()
运行后就能得到你要的结果:
Prefix ABC 3 IJK 2 XYZ 2 dtype: int64
场景2:前缀长度不固定(比如有的是2个字母,有的是3个,后面跟数字)
这种情况用正则提取字母部分更靠谱,用str.extract()提取所有连续字母:
df['Prefix'] = df['Ticket_No'].str.extract(r'([A-Za-z]+)') prefix_counts = df.groupby('Prefix').size()
这个方法能适配更多格式的Ticket_No,比如像'AB123'、'ABCD45'这类前缀长度不同的情况。
内容的提问来源于stack exchange,提问作者Suganesh Kumar
相关产品推荐
相关产品推荐

