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

如何在Pandas DataFrame中正确实现列的条件移位?

在Pandas DataFrame中实现列的条件移位操作

你想要将i值大于6的price列数值移位到指定位置,但当前代码未达到预期效果。先看你的现有代码和预期输出:

现有代码

import pandas as pd
import numpy as np

# 创建'i'和'price'列数据
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]

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

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

预期输出

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]
new_price_values = [np.NaN, np.NaN, np.NaN, 9.99, 14.99, 6.99, 11.99, np.NaN, np.NaN, np.NaN]

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

问题分析

原代码仅对i>6的行执行shift(-3),并将结果赋值给这些行的price_new,导致只有i>6的行有值(且多数为NaN),无法实现将i>6的price值转移到前3位索引位置的需求。

解决方案

通过提取符合条件的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})

# 初始化新列为NaN
df['price_new'] = np.nan
# 筛选出i>6的price数据
selected_prices = df[df['i'] > 6]['price']
# 将筛选出的值赋值到索引减3的位置
df.loc[selected_prices.index - 3, 'price_new'] = selected_prices.values

print(df)

运行后即可得到与预期一致的结果:

i   price  price_new
0  1  10.99        NaN
1  2  19.99        NaN
2  3   5.99        NaN
3  4   8.49       9.99
4  5  12.99      14.99
5  6  15.99       6.99
6  7   9.99      11.99
7  8  14.99        NaN
8  9   6.99        NaN
9 10  11.99        NaN

内容的提问来源于stack exchange,提问作者Helga Steiner

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.16 03:31:34