[英]fill in between rows of two column combinations in a pandas data frame
我有一個這樣的數據框,
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()
Output:
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
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.