product_no part_no level
1 1_1 1
1 1_2 1
1 1_3 2
1 1_4 1
1 1_5 1
1 1_6 2
1 1_7 2
1 1_8 3
1 1_9 3
1 1_10 2
2 2_1 1
2 2_2 1
2 2_3 2
2 2_4 1
在这个数据帧中,我试图编写一个函数来调用比所选行具有更低级别部分的行。例如,对于部分1_3
,较低级别的部分是1_2
。对于1_7
,它是1_5
,对于1_9
,它是1_7
,依此类推。我已经通过for循环进行了这个操作,但是我想知道有没有更有效的方法来完成我在这里的工作。你知道吗
有一个无环的方法,但它会让你的头旋转。顺便说一句,我假设你想用
product_no
来分隔它,因此分组方式是:结果:
工作原理如下:
groupby
将数据帧除以product_no
,然后将每个子帧发送到last_part_no
函数中:真正的工作发生在
last_part_no
函数内部。假设函数正在处理第一个子帧,这相当于调用:以下是
subframe
的值供您参考:dummies
是level
列的一种热编码形式:接下来,我们获取
dummies.index
,并根据每列的“热度”对其进行更改:如果行是“热度”,则保留索引的值,否则,替换为np.nan
。然后我们向前填充这些nan
:对所有3列重复此操作,您的
last_index
框架如下所示(列0是为了方便而创建的,全部是nan
):现在,让我们回到
level
专栏(即subframe['level']
)。要查找last_part_no
,请转到level - 1
:将它与
last_index
框架结合起来,您可以找到包含每行last_part_no
的行的索引。这就是lookup
调用的目的:最后一步是按照
idx
中规定的顺序将part_no
列变成last_part_no
:相关问题 更多 >
编程相关推荐