python - 在熊猫数据框中的两列组合的行之间填充
问题描述
我有一个这样的数据框,
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
现在我想从上面创建一个新的数据框,在 col3 中的每个 T 和 F 之间有连续的 N 在 col2 和 col3 中,用 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 方式/pandas 快捷方式来有效地做到这一点。
解决方案
这是我的方法:
# 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
推荐阅读
- html - 自动换行后如何对齐图标和文本?
- kibana - 用于 kibana 的 nginx 反向代理
- sql - 我可以在查询中看到 Profiler 中的 TextData 吗?
- r - 当需要行上的特定条件时,如何替换 R 中的双循环?
- c++ - 如何使用 C++ 文件系统库将文件复制到另一个目录
- reactjs - 用星号替换字符反应输入
- ios - 织物崩溃 iOS
- angular - 从验证中重置 Angular 7 Reactive
- angular - 我将如何设置默认单选按钮检查并知道从反应形式的单选组中检查了哪个单选按钮?
- javascript - AutoCompleteEditor(react-data-grid)在 chrome 中不起作用