条件移位pandas列

edqdpe6u  于 2023-08-01  发布在  其他
关注(0)|答案(3)|浏览(87)

我想条件转移Pandas列,会想转移所有列与i > 6下面是我正在做的,它是不工作

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)

n53p2ov0

n53p2ov01#

应用移位,然后选择要保留的单元格。看起来你试图一次完成这一切,只是在这个过程中得到了错误的索引。

你所寻求的是一句话

shift_from = 6
shift_by = -3

df['price_new'] = df.loc[df.i>(shift_from+shift_by),'price'].shift(shift_by)

字符串
这将产生您所期望的输出。

为清晰起见,分2步分解

带有可分配的中间柱。

1)应用shift

df['price_shift'] = df['price'].shift(shift_by)
df
    i   price   price_shift
0   1   10.99   8.49
1   2   19.99   12.99
2   3   5.99    15.99
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

2)选择单元格

df['price_new'] = df.loc[df.i>(shift_from+shift_by), 'price_shift']
df
    i  price  price_shift  price_new
0   1  10.99         8.49        NaN
1   2  19.99        12.99        NaN
2   3   5.99        15.99        NaN
3   4   8.49         9.99       9.99
4   5  12.99        14.99      14.99
5   6  15.99         6.99       6.99
6   7   9.99        11.99      11.99
7   8  14.99          NaN        NaN
8   9   6.99          NaN        NaN
9  10  11.99          NaN        NaN

fkvaft9z

fkvaft9z2#

这里有一个方法:

df['new_price'] = df['price'].where(df.index >= 6, np.NaN).shift(-3)

字符串
df.loc[df.i>6, 'price'].shift(-3)的问题在于它选择了最后四行(索引大于6的行:

>>> df.loc[df.i>6, 'price']
6     9.99
7    14.99
8     6.99
9    11.99


然后它转移那些:

>>> df.loc[df.i>6, 'price'].shift(-3)
6    11.99
7      NaN
8      NaN
9      NaN

bvpmtnay

bvpmtnay3#

这是另一种方法。

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']
df['price_new'] = df['price_new'].shift(-3)

字符串
因此,首先创建新列(price_new),然后应用shift。

相关问题