以下是示例数据集:
>>> 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 sr=nsr+stb
,3.当有新值分配给 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
2条答案
按热度按时间mklgxw1f1#
根据评论中的问题和讨论,以下是迄今为止的部分解决方案:
sr
列已获得预期结果,但nsr
需要进一步的工作:结果:
部分工作
nsr
:结果:
qlckcl4x2#
(部分尝试等待反馈)− 不符合评论。)
从你的解释来看,
sr
是不同的累计和stb
每人st
,nst
一对但是,这并不完全符合您的预期输出:第9、10、15、19和23行发生了什么?
例如,第9行是第一个
b, c
,如果我将其与第一行的第3行进行比较b, a
应该是0+3
第3行也是这样0+1
.