Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/308.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 在数据框中两列组合的行之间填充_Python_Pandas_Dataframe - Fatal编程技术网

Python 在数据框中两列组合的行之间填充

Python 在数据框中两列组合的行之间填充,python,pandas,dataframe,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

我有一个这样的数据框

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中,在col3中的每个T和F之间都有连续的N,用T填充上面的非N值。忽略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的方法/快捷方式来有效地完成它。

这是我的方法:

# 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()
输出:

    col1 col2 col3
0      1    A    T
1      2    A    F
2      3    N    N
3      4    N    N
4      5    B    T
5      6    B    T
6      7    B    F
7      8    N    N
8      9    A    T
9     10    N    N
10    11    N    N
11    12    A    T
12    13    N    N
13    14    N    N
14    15    A    T
15    16    A    T
16    17    A    F

你将不得不对你的要求提供更详细的解释。我认为解释很清楚。在
col3
中,如果
N
介于
T
F
之间,则将
col2
col3
替换为前一行,如在
ffill
中。这比我使用的方法简单得多+1.