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.