如何在DataFrame中为整数行生成递增序列列并跳过小数行
解决方案
你可以通过以下步骤实现需求:
- 先判断
B列的数值是否为整数,生成布尔掩码 - 基于掩码生成递增序号,非整数位置填充为空值
完整代码示例
import pandas as pd # 构造你的示例DataFrame df = pd.DataFrame({ 'A': ['AA'] * 5, 'B': [101, 102, 103.5, 104, 105] }) # 1. 生成判断B列是否为整数的掩码 is_integer_mask = df['B'].apply(lambda x: x.is_integer()) # 2. 生成C列:仅整数行递增,小数行留空 df['C'] = is_integer_mask.cumsum().where(is_integer_mask, '') # 查看结果 print(df)
输出结果
A B C 0 AA 101.0 1 1 AA 102.0 2 2 AA 103.5 3 AA 104.0 3 4 AA 105.0 4
代码说明
df['B'].apply(lambda x: x.is_integer()):逐个检查B列的数值是否为整数,返回布尔序列(True对应整数行,False对应小数行)is_integer_mask.cumsum():对布尔序列累加,True会被视作1累加,False视作0,从而得到连续递增的序号.where(is_integer_mask, ''):仅保留布尔序列为True的位置的序号值,False的位置替换为空字符串,满足你的需求
你原有代码的问题
- 直接用
range(1, len(df))会给所有行赋值,无法跳过小数行 - 代码中的
df['order']和detailed_category_id属于笔误,应该对应df['B']和新增的C列
内容的提问来源于stack exchange,提问作者ImNotSureAboutStats
相关产品推荐
相关产品推荐

