好的,问题是是否有一种快速的方法来对PANDA或NumPy进行XOR运算,并用结果更新下一行.

基本上,我有一个名为‘ss’的Pandas 数据框,如下所示:

    rst  no1  no2  no3  no4  no5  no6  no7
0     1    6    2   15   14    9    5    1
1    11    0    0    0    0    0    0    0
2     9    0    0    0    0    0    0    0
3    11    0    0    0    0    0    0    0
4     3    0    0    0    0    0    0    0
5    15    0    0    0    0    0    0    0
6     0    0    0    0    0    0    0    0


Use: ss = pd.read_clipboard()
to copy paste the dataframe into a variable use the above command

我想做的是用下一个‘rst’列中的XOR来更新每个‘no’列,使其中的每个no行都等于ss.loc[1:,[‘no1’,‘no2’,‘etc’])=[ss.loc[1,(‘rst’)]^ss.loc[0,[0,[‘no1’,‘no2’,‘etc’])或类似的内容,因此第一步将创建如下所示的数据帧:

    rst  no1  no2  no3  no4  no5  no6  no7
0     1    6    2   15   14    9    5    1
1    11   13    9    4    5    2   14   10
2     9    0    0    0    0    0    0    0
3    11    0    0    0    0    0    0    0
4     3    0    0    0    0    0    0    0
5    15    0    0    0    0    0    0    0
6     0    0    0    0    0    0    0    0

which is basically ss.loc[1, ('rst')] which is 11 so 11 ^ np.array([ 6, 2, 15, 14, 9, 5, 1]) which the result is np.array([13, 9, 4, 5, 2, 14, 10]) which then I set to each no column in sequence as you can see above.

and the next step is to take ss.loc[2, ('rst')] which is 9 and do the next sequence:

    rst  no1  no2  no3  no4  no5  no6  no7
0     1    6    2   15   14    9    5    1
1    11   13    9    4    5    2   14   10
2     9    4    0   13   12   11    7    3
3    11    0    0    0    0    0    0    0
4     3    0    0    0    0    0    0    0
5    15    0    0    0    0    0    0    0
6     0    0    0    0    0    0    0    0

所以9^np.array([13,9,4,5,2,14,10])的结果是 Np.array([4,0,13,12,11,7,3]),然后我将其按顺序设置在每个no列中,如上所述.

我的问题是,我如何以快速/快速的方式对NumPy或Pandy执行此操作,以及我是否可以在不使用任何循环的情况下完成此操作,因为我正在处理的数据集有一百万个,而循环速度很慢,所以我希望有一种快捷或更好的方法,将每个‘no*’列的下一个‘rst’行的XOR设置为与‘rst’列相同行中的相应‘no’列.

推荐答案

IIUC,您可以在rst上使用numpy.bitwise_xor,在其accumulate变体中使用一次,然后组合成no列:

rst = ss['rst'].to_numpy(copy=True)[:,None]
rst[0] = 0
no = ss.filter(like='no').iloc[0].to_numpy()

x = np.bitwise_xor(np.bitwise_xor.accumulate(rst, axis=0), no)

out = ss[['rst']].join(
       pd.DataFrame(x, index=ss.index, columns=list(ss.filter(like='no')))
      )

这是因为XOR是commutativeassociative,所以A^B^C等于(A^C)^B.在这里,我们首先在rst上累加XOR,然后将其应用于每个中间数的第一行.

输出:

   rst  no1  no2  no3  no4  no5  no6  no7
0    1    6    2   15   14    9    5    1
1   11   13    9    4    5    2   14   10
2    9    4    0   13   12   11    7    3
3   11   15   11    6    7    0   12    8
4    3   12    8    5    4    3   15   11
5   15    3    7   10   11   12    0    4
6    0    3    7   10   11   12    0    4

Python相关问答推荐

剧作家Python:expect(locator).to_be_visible()vs locator.wait_for()

如何通过多2多字段过滤查询集

我必须将Sigmoid函数与r2值的两种类型的数据集(每种6个数据集)进行匹配,然后绘制匹配函数的求导.我会犯错

标题:如何在Python中使用嵌套饼图可视化分层数据?

为什么这个带有List输入的简单numba函数这么慢

大小为M的第N位_计数(或人口计数)的公式

如何在Django基于类的视图中有效地使用UTE和RST HTIP方法?

Telethon加入私有频道

如何从.cgi网站刮一张表到rame?

如何调整QscrollArea以正确显示内部正在变化的Qgridlayout?

为什么抓取的HTML与浏览器判断的元素不同?

Django RawSQL注释字段

实现神经网络代码时的TypeError

将pandas导出到CSV数据,但在此之前,将日期按最小到最大排序

Django—cte给出:QuerySet对象没有属性with_cte''''

使用BeautifulSoup抓取所有链接

提高算法效率的策略?

判断Python操作:如何从字面上得到所有decorator ?

Tensorflow tokenizer问题.num_words到底做了什么?

如何使用pytest在traceback中找到特定的异常