簡體   English   中英

在 pandas 數據框中的兩列組合的行之間填充

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM