如何统计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)
代码说明
- 提取年份列:通过筛选列名以
20开头的列,确保只处理年份数据,同时排序保证年份顺序正确 - 计算切换次数:
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
相关产品推荐
相关产品推荐

