Python中如何从指定索引位置开始生成新列表及pandas序列
实现方案
你需要的是pandas序列的错位赋值需求,直接用内置的shift()方法即可实现,不需要手动循环,效率更高也不会出现索引错位问题。
场景1:新序列Longitud_max的第n位对应原序列Longitud_min的第n-1位(即索引1开始对应原序列索引0,索引2对应原序列索引1,以此类推)
# 偏移1位,索引0默认返回NaN,如果需要填充指定值可追加fillna方法 df['Longitud_max'] = df['Longitud_min'].shift(1) # 示例:索引0填充原序列索引1的取值 df['Longitud_max'] = df['Longitud_min'].shift(1).fillna(df['Longitud_min'].iloc[1])
场景2:新序列Longitud_max从索引2开始对应原序列Longitud_min的内容(即索引2对应原序列索引0,索引3对应原序列索引1,以此类推)
# 偏移2位,前2位默认返回NaN,可按需填充 df['Longitud_max'] = df['Longitud_min'].shift(2) # 示例:前两位填充原序列的前两位取值 df['Longitud_max'] = df['Longitud_min'].shift(2).fillna(method='backfill')
手动循环实现方案(不推荐)
你之前的代码逻辑出错是因为没有提前初始化等长列表,且遍历的是原序列所有元素而非从指定索引开始遍历,修正后写法如下:
# 先初始化和原序列长度一致的空列表 Longitud_max = [None] * len(df) # 按需求给前两个位置赋值,示例前两位保留原序列的前两位 Longitud_max[0] = df['Longitud_min'].iloc[0] Longitud_max[1] = df['Longitud_min'].iloc[1] # 从索引2开始填充原序列从索引0开始的内容 for i in range(2, len(df)): Longitud_max[i] = df['Longitud_min'].iloc[i-2] df['Longitud_max'] = Longitud_max
内容的提问来源于stack exchange,提问作者Services Puzzles Consulting
相关产品推荐
相关产品推荐

