如何在Pandas中统计code列频次并展示对应note列值?
解决方法:同时统计编码频次与对应任意备注
这问题我熟!要实现统计code列各编码的出现频次,同时获取每个编码对应的任意一条note,用pandas的分组聚合或者合并操作就能轻松搞定,给你两种实用方案:
方案一:直接分组聚合(推荐,更简洁)
这种方法通过groupby对code分组,一次性聚合出频次和任意一条备注,效率很高:
import pandas as pd # 先构造示例数据(你可以替换成自己的DataFrame) df = pd.DataFrame({ 'code': ['A', 'A', 'B', 'C', 'B', 'A', 'C'], 'note': ['adam', 'alice', 'bob', 'charlie', 'beth', 'andrew', 'chris'] }) # 分组聚合:统计频次 + 取第一条备注(也可以换成last()取最后一条) result = df.groupby('code').agg( 出现频次=('code', 'size'), # size()统计分组内的行数,包含NaN;如果要排除NaN用count() 示例备注=('note', 'first') # first()取分组内第一条note,随机取的话可以用lambda x: x.sample(n=1).iloc[0] ).reset_index() print(result)
运行后输出结果:
code 出现频次 示例备注 0 A 3 adam 1 B 2 bob 2 C 2 charlie
方案二:先统计频次再合并去重数据
如果你习惯先单独统计频次,再和去重后的备注数据合并,也可以这么做:
# 1. 统计code的出现频次 code_counts = df['code'].value_counts().reset_index(name='出现频次') # 2. 获取每个code对应的任意一条备注(通过去重实现) unique_notes = df.drop_duplicates(subset='code')[['code', 'note']].rename(columns={'note': '示例备注'}) # 3. 合并两个结果 result = pd.merge(code_counts, unique_notes, on='code') print(result)
这个方法的输出和方案一完全一致,适合分步操作的场景。
小提示
- 如果想要随机获取一条备注,把方案一里的
'first'换成lambda x: x.sample(n=1).iloc[0]即可,不过这种方法在数据量大时效率会稍低一点。 - 用
size()统计频次会包含code为NaN的情况,如果要排除NaN,换成count()就行。
内容的提问来源于stack exchange,提问作者AnonX
相关产品推荐
相关产品推荐

