如何使用循环为pandas DataFrame添加符合条件的分组编号列
问题原因分析
- 列名大小写不匹配:你的DataFrame里列名是
Time_diff,代码里用的是time_diff,pandas列名大小写敏感,导致无法正确读取列值 - 索引方式错误:不能直接用
df[i][列名]的方式逐行赋值,这种写法会触发链式索引警告,甚至无法成功写入值 - 初始行遗漏:循环从索引1开始,索引0的第一行没有被赋值,会出现空值
- 逻辑疏漏:赋值逻辑冗余,不需要分分支重复写赋值操作
解决方案
方案1:修正循环逻辑
import pandas as pd df = pd.DataFrame({'Time_diff':[1400,1200,1000,1800,1200,1200,1200,1800,1200]}) a = 1 # 先给第一行赋值 df.loc[0, 'group_num'] = a for i in range(1, len(df)): if df.loc[i, 'Time_diff'] >= 1800: a += 1 df.loc[i, 'group_num'] = a
方案2:pandas向量化写法(效率更高,适合大数据量)
无需手动写循环,用内置函数实现逻辑更简洁:
import pandas as pd df = pd.DataFrame({'Time_diff':[1400,1200,1000,1800,1200,1200,1200,1800,1200]}) # 先判断每个值是否≥1800,转成整数后累计求和,加1即为分组编号 df['group_num'] = (df['Time_diff'] >= 1800).cumsum() + 1
内容的提问来源于stack exchange,提问作者Haiming Wang
相关产品推荐
相关产品推荐

