小编Dst*_*to4的帖子

pandas选择行范围

我有一个快速的问题.我创建了一个具有许多特征的数据框.我想创建一个新列,选择两个特定行(将作为输入)之间的所有行.

假设数据帧如下:

data = {'currency': ['Euro', 'Euro', 'Euro', 'Dollar', 'Dollar', 'Yen',
                     'Yen', 'Yen', 'Pound', 'Pound', 'Pound, 'Pesos',
                     'Pesos'], 
    'cost': [34, 67, 32, 29, 48, 123, 23, 45, 78, 86, 23, 45, 67]}
df = pd.DataFrame(data, columns = ['currency', 'cost'])
df
Run Code Online (Sandbox Code Playgroud)

df表

我想添加一个新列,在满足条件时分配1.在我的情况下,条件是两种特定货币之间的所有行.例如,假设我想要"美元"和"英镑"之间的所有货币.我的猜测是我必须创建一个掩码并将其用作条件,即选择第一个'Dollar'行和最后'Pound'行(即行3-10)之间的所有行.

我在创建该掩码时遇到问题,因为按字母顺序选择货币:

mask = (df['currency'] >= 'Dollar') & (df['currency'] <= 'Pound')
Run Code Online (Sandbox Code Playgroud)

上面创建了一个新的列,其中包含所有货币的T,除了'Yen'.我可以看出上面为什么会失败,但却无法想到一种做我想做的事情.

注意:相同的货币名称将成组,例如'Pounds'不能在4-5行和8-10行.

提前致谢

python conditional-statements pandas

7
推荐指数
1
解决办法
2433
查看次数

numpy沿单轴滚动

我有一个带有二进制值的numpy数组,我需要按以下方式更改:每个元素的值必须向左移动一列但只在同一行内.举个例子,我有以下数组:

>>> arr = np.array([[0,0,1,0],[1,0,0,0],[0,0,1,1]])
>>> arr
array([[0, 0, 1, 0],
       [1, 0, 0, 0],
       [0, 0, 1, 1]])
Run Code Online (Sandbox Code Playgroud)

它需要转变为:

>>> arr
array([[0, 1, 0, 0],
       [0, 0, 0, 1],
       [0, 1, 1, 0]])
Run Code Online (Sandbox Code Playgroud)

我知道np.roll(arr,-1)将值向左滚动一个单元格,但它似乎无法在它们所属的行中滚动它们(即单元格[1,0]上的元素转到[0,3]而不是期望的[1,3].有没有办法做到这一点?

提前致谢.

python arrays numpy

1
推荐指数
1
解决办法
55
查看次数

标签 统计

python ×2

arrays ×1

conditional-statements ×1

numpy ×1

pandas ×1