You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

分组内数值统计:如何按年份统计Guest/Stranger数量并标记年份类型

按年份统计Guest/Stranger数量并标记年份类型的实现方案

嘿,我来帮你搞定这个需求!咱们的目标很明确:按年份分组统计character字段为'Guest'和'Stranger'的记录数,然后根据数量对比给每个年份打上对应的标签。下面一步步来实现:

第一步:过滤目标数据并分组统计

首先,我们需要从数据集中筛选出character是Guest或Stranger的记录,然后按年份分组统计各自的数量。用pandas来做这个非常顺手:

import pandas as pd

# 假设你的数据集存在titles变量里
# 先过滤出我们需要的character值
filtered_data = titles[titles['character'].isin(['Guest', 'Stranger'])]

# 按年份(你示例里的n列,实际如果是year字段就替换)和character分组,统计数量
yearly_counts = filtered_data.groupby(['n', 'character']).size().unstack(fill_value=0)

这里unstack(fill_value=0)是为了把Guest和Stranger变成列,方便后续对比,缺失的数量用0填充。

第二步:给年份打标签

接下来我们要给每个年份判断标签,直接用apply函数写个简单的逻辑就行:

# 定义标签规则:Guest多就是guest year,否则是strange year
yearly_counts['year_tag'] = yearly_counts.apply(
    lambda row: 'guest year' if row['Guest'] > row['Stranger'] else 'strange year',
    axis=1
)

# 要是想让年份从索引变回普通列,就重置索引
yearly_counts = yearly_counts.reset_index()

结合你的样例数据测试

你给出的样例数据里只有一条character是Guests(应该是笔误吧?假设是Guest),我模拟了一条Stranger的数据来测试,完整代码如下:

# 模拟你的样例数据(修正character并补充一条Stranger记录)
sample_data = {
    'name': ['Homo', 'Ramon', "'El Guisa'", "'El Viti'", 'Murray', 'TestUser'],
    'type': ['actor']*6,
    'character': ['Guest', 'Owner', 'Bailaor', 'Cantaor', 'Himself', 'Stranger'],
    'n': [22.0, None, 25.0, 20.0, None, 22.0]
}
titles = pd.DataFrame(sample_data)

# 执行上述逻辑
filtered_data = titles[titles['character'].isin(['Guest', 'Stranger'])]
yearly_counts = filtered_data.groupby(['n', 'character']).size().unstack(fill_value=0)
yearly_counts['year_tag'] = yearly_counts.apply(
    lambda row: 'guest year' if row['Guest'] > row['Stranger'] else 'strange year',
    axis=1
)
yearly_counts = yearly_counts.reset_index()

print(yearly_counts)

运行后输出:

n  Guest  Stranger    year_tag
0  22.0      1         1  strange year

如果两者数量相等,这里默认标记为strange year,你可以自己加个判断分支处理平局的情况,比如改成:

lambda row: 'guest year' if row['Guest'] > row['Stranger'] else ('strange year' if row['Stranger'] > row['Guest'] else 'tie year')

一些需要注意的细节

  • 如果你实际的年份字段不是n,记得把代码里的'n'替换成真实的字段名(比如'year')
  • 如果character字段有拼写不一致的情况(比如guests、Guest),先做清洗:titles['character'] = titles['character'].str.strip().str.title()
  • 要是有缺失的年份值,可以提前过滤掉:filtered_data = filtered_data.dropna(subset=['n'])

内容的提问来源于stack exchange,提问作者Tony Z.

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.15 03:40:18