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

如何统计DataFrame中各国年度收入组的切换次数?

计算国家收入组切换次数的解决方案

你的代码问题点:

  • 年份列是字符串格式(如'2001'),但你用数字2001索引,会触发列不存在的错误
  • 比较时误用赋值运算符=,应该用相等比较运算符==
  • 嵌套循环逻辑错误,直接给整列df['count']赋值,无法实现按国家单独计算切换次数

高效实现代码

import pandas as pd

# 构造示例数据(完整2001-2022数据可自行补全)
df = pd.DataFrame({
    'country': ['A', 'B', 'C'],
    '2001': ['L', 'L', 'L'],
    '2002': ['L', 'M', 'H'],
    '2003': ['L', 'M', 'H'],
    '2022': ['M', 'L', 'H']
})

# 提取并按顺序排序所有年份列
year_cols = sorted(col for col in df.columns if col.startswith('20'))

# 按行计算相邻年份收入组不同的次数(即切换次数)
df['switch_count'] = df[year_cols].apply(
    lambda row: (row != row.shift()).sum(),
    axis=1
)

print(df)

代码说明

  1. 提取年份列:通过筛选列名以20开头的列,确保只处理年份数据,同时排序保证年份顺序正确
  2. 计算切换次数:
    • row.shift()将当前行的收入组数据向后偏移一位,得到上一年的收入组
    • row != row.shift()生成布尔值,True表示当前年份与上一年收入组不同(即发生切换)
    • sum()统计布尔值中True的数量,就是该国家的总切换次数

示例输出

country 2001 2002 2003 2022  switch_count
0       A    L    L    L    M             1
1       B    L    M    M    L             2
2       C    L    H    H    H             1

注:示例中C国2001→2002从L切换到H,之后保持H,所以切换次数为1。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.12 10:15:15