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

计算每个person id的type变量跨季度变化频次并新增frequency列的Python方案

实现方案

我们用Python的pandas库完成需求,操作步骤如下:

前置准备

先安装依赖库:

pip install pandas

完整实现代码

import pandas as pd

# 1. 构造样例数据,你可以替换成读自己的文件(比如pd.read_excel、pd.read_csv)
data = [
    [2020, 'q1', 'a', 1],
    [2020, 'q2', 'b', 1],
    [2019, 'q1', 'a', 1],
    [2019, 'q1', 'a', 2],
    [2019, 'q4', 'b', 2],
    [2019, 'q1', 'a', 3],
    [2019, 'q4', 'a', 3]
]
df = pd.DataFrame(data, columns=['year', 'quarter', 'type', 'person id'])

# 2. 生成时间排序字段,确保按季度先后顺序统计变化
df['time_sort'] = df['year'].astype(str) + df['quarter']

# 3. 按person id分组统计切换次数
def count_switch(group):
    # 先按时间排序
    group = group.sort_values('time_sort')
    # 对比当前行和上一行的type,不一致就算一次切换,统计总次数
    return (group['type'] != group['type'].shift(1)).sum()

# 生成每个person id对应的切换次数字典
switch_count = df.groupby('person id').apply(count_switch).to_dict()

# 4. 给原数据集新增frequency列
df['frequency'] = df['person id'].map(switch_count)

# 可选:删掉辅助的排序字段
df = df.drop('time_sort', axis=1)

# 输出结果查看
print(df)

结果验证

运行上述代码后,输出的数据集里frequency列完全符合要求:

  • person id为1的行frequency值都是2
  • person id为2的行frequency值都是1
  • person id为3的行frequency值都是0

内容的提问来源于stack exchange,提问作者ff97

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 20:06:03