numpy 如何将dataframe切片与下一个num进行异或并将答案插入列'dr'中

oyxsuwqo  于 2023-04-12  发布在  其他
关注(0)|答案(1)|浏览(124)

好的,我有这个 Dataframe ,你注意到了,我用了一个4的切片

In [13147]: solve[::4]
Out[13147]: 
    rst  dr
0     1   0
4     3   0
8     7   0
12    5   0
16   14   0
20   12   0
24    4   0
28    4   0
32    4   0
36    3   0
40    3   0
44    5   0
48    5   0
52   13   0
56    3   0
60    1   0

我想要的是在列'rst'中xor 1乘3并得到2(1^3=2).然后我想做3^7 = 4,我想把它们放在dr. so solve.loc[0:,('dr ')] = 2,and solve.loc[4:,('dr')] = 4.我目前的方法很繁琐,不是自动的,这是我正在做的:

In [13150]: np.array(solve.loc[::4, ('rst')]) ^ np.array(solve.loc[4::4, ('rst')])
ValueError: operands could not be broadcast together with shapes (16,) (15,)

解决方法是:

In [13159]: wutwut = np.array(solve.loc[::4, ('rst')])[:15] ^ np.array(solve.loc[4::4, ('rst')])
Out[13159]: 
array([ 2,  4,  2, 11,  2,  8,  0,  0,  7,  0,  6,  0,  8, 14,  2],
      dtype=int8)

然后将值放回solv.loc ['dr']是一个问题,因为我必须手动输入长度,如:

solve.loc[:56:4, ('dr')] = wutwut

我看到我必须手动设置长度,有没有更自动的方法
正如你所看到的,这是乏味的,不实用的,因为我正在使用不同的和不断变化的长度,我需要一个更自动化的最佳实践演员。我正在寻找一些建议,并提前感谢。此外,我有更高级的用例,其中列之间的xor,所以如果有人有策略,它将帮助我的道路以及

zmeyuzjn

zmeyuzjn1#

让我们使用loc进行索引和自动赋值

s = solve.loc[::4, 'rst']
solve.loc[s.index[:-1], 'dr'] = s[:-1].values ^ s[1:].values
rst  dr
0     1   2
4     3   4
8     7   2
12    5  11
16   14   2
20   12   8
24    4   0
28    4   0
32    4   7
36    3   0
40    3   6
44    5   0
48    5   8
52   13  14
56    3   2
60    1   0

相关问题