我有一个这样的数据框,
col1 col2 col3
1 A T
2 A F
3 N N
4 N N
5 B T
6 N N
7 B F
8 N N
9 A T
10 N N
11 N N
12 A T
13 N N
14 N N
15 A T
16 N N
17 A F
现在,我想以这种方式从上方创建一个新的数据帧,在col2和col3中的col和col3中的每个T和F之间有连续的N,并用T填充以上非N值。忽略那些T或F排在T和F和之后。
所以所需的数据帧看起来像
col1 col2 col3
1 A T
2 A F
3 N N
4 N N
5 B T
6 B T
7 B F
8 N N
9 A T
10 N N
11 N N
12 A T
13 N N
14 N N
15 A T
16 A T
17 A F
我可以使用for循环执行此操作,并通过比较下一个和上一个值来存储索引。但是执行将花费更长的时间。我正在寻找一些有效的pythonic方式/熊猫捷径。
答案 0 :(得分:1)
这是我的方法:
newmtd = oldmtd()
输出:
# mask T and F
TFs = df['col3'].mask(df['col3'].eq('N'))
after_T = TFs.ffill()
before_F = TFs.bfill()
# between
bt_TF = after_T.eq('T') & before_F.eq('F')
# mask and ffill:
df['col2'] = df['col2'].mask(bt_TF).ffill()
df['col3'] = df['col3'].mask(bt_TF).ffill()