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

如何实现Pandas列的条件移位?现有代码未达预期

Pandas条件移位:将i>6对应的price值移到指定位置

需要将DataFrame中i>6对应的price值,移到索引3到6的位置,其余位置填充NaN,原代码无法得到预期结果。

原实现代码

import pandas as pd
import numpy as np

# Creating data for 'i' and 'price' columns
n = 10  # Number of entries
i_values = list(range(1, n+1))
price_values = [10.99, 19.99, 5.99, 8.49, 12.99, 15.99, 9.99, 14.99, 6.99, 11.99]

# Creating DataFrame
data = {'i': i_values,
        'price': price_values}
df = pd.DataFrame(data)

df['price_new'] = df.loc[df.i>6, 'price'].shift(-3)

预期输出

n = 10  # Number of entries
i_values = list(range(1, n+1))
price_values = [10.99, 19.99, 5.99, 8.49, 12.99, 15.99, 9.99, 14.99, 6.99, 11.99]
new_price_values = [np.NaN, np.NaN, np.NaN, 9.99, 14.99, 6.99, 11.99, np.NaN, np.NaN, np.NaN]

# Creating DataFrame
data = {'i': i_values,
        'price': price_values,
        'new_price': new_price_values}
df = pd.DataFrame(data)

问题分析

原代码的核心问题是:对筛选后的子Seriesdf.loc[df.i>6, 'price']执行shift(-3)时,只会在该子Series内部移动值,最终仅索引6的位置会被赋值为索引9的price值,其余位置全为NaN,完全不符合预期。

正确解法

方式一:直接提取值并赋值

先提取i>6对应的price值,再直接赋值到目标索引位置:

import pandas as pd
import numpy as np

n = 10
i_values = list(range(1, n+1))
price_values = [10.99, 19.99, 5.99, 8.49, 12.99, 15.99, 9.99, 14.99, 6.99, 11.99]
df = pd.DataFrame({'i': i_values, 'price': price_values})

# 提取i>6对应的price值
target_prices = df.loc[df['i'] > 6, 'price'].values
# 初始化新列为NaN,赋值到目标索引位置
df['price_new'] = np.nan
df.loc[3:6, 'price_new'] = target_prices

方式二:利用索引对齐实现移位

通过掩码创建临时序列,再调整索引实现移位效果:

import pandas as pd
import numpy as np

n = 10
i_values = list(range(1, n+1))
price_values = [10.99, 19.99, 5.99, 8.49, 12.99, 15.99, 9.99, 14.99, 6.99, 11.99]
df = pd.DataFrame({'i': i_values, 'price': price_values})

# 创建掩码标记i>6的行
mask = df['i'] > 6
# 生成仅保留目标值的临时序列
temp_series = df['price'].where(mask)
# 将临时序列索引向前偏移3位,对齐原DataFrame索引
df['price_new'] = temp_series.reindex(df.index - 3)

两种方式均可得到预期结果:price_new列前3行、后3行为NaN,索引3-6依次为9.99、14.99、6.99、11.99。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.16 03:23:15