如何向量化函数以加快对数据框的操作?

时间:2019-01-09 13:08:06

标签: python pandas dataframe data-science

我有一个数据框(在下面,即隶属关系),一个字段(A)以排序的方式在该行中包含值。还有一个新字段(新),该字段在过程开始时是字段C的副本。我想做的是,如果A中的上一行与A中的当前行相同,并且如果new的当前行还是{ {1}}是new,将1分配给当前1。最后,在new的重复值的最后,A将是new1,具体取决于函数中的条件和先前的值,其中{{ 1}}重复将0设为A。我可以通过下面的功能来实现。

new

此数据帧上此函数的结果位于此enter image description here

问题是,我有一个非常大的数据集,并且在它上运行此函数非常慢。如何改善代码使其更快?我知道如果我能够在熊猫中向量化此功能,时间将会大大缩短。如何对这个函数进行矢量化处理?

1 个答案:

答案 0 :(得分:0)

IIUC,让我解释一下逻辑,看看是否匹配。

如果在A的任何组中,C的值等于1,则将“ new”列的值1分配给该组中的最后一个记录。

membership['new'] = membership.groupby('A')['C']\
                              .transform(lambda x: np.where(x.index == x.index[-1], 
                                                            x.max(), 0))

输出:

              A  B  C  new
0   20000000460  4  1    0
1   20000000460  0  1    0
2   20000000460  5  0    0
3   20000000460  0  0    1
4   20000000459  6  0    0
5   20000000461  0  1    0
6   20000000461  2  0    1
7   20000000462  5  1    1
8   20000000464  6  1    0
9   20000000464  7  1    0
10  20000000464  4  0    0
11  20000000464  3  0    1
12  20000000465  2  0    0
13  20000000465  7  0    0
14  20000000466  9  1    1