以下是示例数据集:
>>> df
vn pt st nst stb mid
0 a 0.1 a b 0 3
1 a 0.2 a b 4 3
2 a 0.3 a b 1 3
3 a 0.3 b a 1 3
4 a 0.4 a b 1 3
5 a 0.4 a b 2 3
6 a 0.5 c b 6 3
7 a 0.5 c b 0 3
8 a 0.6 c b 1 3
9 a 1.1 b c 2 3
10 a 1.2 b c 1 3
11 a 1.3 d b 6 3
12 a 1.4 d b 0 3
13 a 1.4 d b 1 3
14 a 1.5 e d 2 3
15 a 1.6 d e 0 3
16 a 0.1 d y 1 7
17 a 0.2 y d 4 7
18 a 0.3 y d 1 7
19 a 0.4 y x 3 7
20 a 0.5 x z 0 7
21 a 0.6 p z 2 7
22 a 0.6 z p 6 7
23 a 1.1 p q 3 7
从这个数据集中,我想创建两个新列sr
和nsr
。需要记住的几件事:stb
值表示st
的对应值。当在st
或nst
中注册了一个新字符串时,默认情况下sr=0
,nsr=0
相应地注册
st
的编码:1.当st
的值连续相同时sr=sr+stb
,2.当nst
的值移动到st
{st
,st=stb
nst
的编码:1.当nst
的值连续相同时nsr
将保持不变(无变化),2.当st
的值移动到nst
时,前一个sr
的值应返回到下一个nsr
,3.当有一个新值分配给nst
,nsr=0
迭代将继续,直到mid
是连续的相同值(当出现不同的mid时,它将从头开始迭代)。要生成这两列,请查看以下示例:
st nst stb sr nsr
a b 0 0+0=0(sr=sr+stb) 0(nst newly enrolled, set to 0)
a b 4 0+4=4(sr=sr+stb) 0(remains same)
a b 1 4+1=5(sr=sr+stb) 0(remains same)
b a 1 0+1=1(sr=nsr+stb),bcz b moves from nst to st 5(shifts from sr to nsr)
a b 1 5+1=6(sr=nsr+stb),bcz a moves from nst to st 1(shifts from sr to nsr)
a b 2 6+2=8(sr=sr+stb) 1(remains same)
c b 6 0+6=6(sr=sr+stb),c newly inserted 1(remains same)
...........
(will continue recursively until `mid` is unique)
...........
预期输出:
vn pt st sr nsr
0 a 0.1 a 0 0
1 a 0.2 a 4 0
2 a 0.3 a 5 0
3 a 0.3 b 1 5
4 a 0.4 a 6 1
5 a 0.4 a 8 1
6 a 0.5 c 6 1
7 a 0.5 c 6 1
8 a 0.6 c 7 1
9 a 1.1 b 3 7
10 a 1.2 b 4 7
11 a 1.3 d 6 4
12 a 1.4 d 6 4
13 a 1.4 d 7 4
14 a 1.5 e 2 7
15 a 1.6 d 7 2
16 a 0.1 d 1 0
17 a 0.2 y 4 1
18 a 0.3 y 5 1
19 a 0.4 y 8 0
20 a 0.5 x 0 0
21 a 0.6 p 2 0
22 a 0.6 z 6 2
23 a 1.1 p 5 0
(部分尝试等待反馈)− 不符合评论。)
根据您的解释,
sr
是每个st
,nst
对的stb
的不同累计和。但是,这并不完全符合您的预期输出:第9、10、15、19和23行发生了什么
例如,第9行是第一个带有
b, c
的行,如果我将其与第3行比较,第一个带有b, a
的行应该是0+3
,就像第3行是0+1
根据评论中的问题和讨论,以下是迄今为止的部分解决方案:
sr
列已获得预期结果,但nsr
需要进一步的工作:结果:
为
nsr
进行的部分工作:结果:
编辑
这里是另一次尝试,以完成上次留下的部分作品
通过添加一组新的处理,最终实现了
nsr
的期望值结果:
相关问题 更多 >
编程相关推荐