在熊猫数据框中填充两个列组合的行之间

时间:2019-11-20 16:02:18

标签: python pandas dataframe

我有一个这样的数据框,

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方式/熊猫捷径。

1 个答案:

答案 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()