计算每个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
相关产品推荐
相关产品推荐

