簡體   English   中英

在Pandas的多個列中用不同的條件替換值

[英]Replace values with different condition in multiple columns in Pandas

我有一個類似這樣的數據框,但更大:

source  next1     next2     next3
  b1     {-}       b2      -,b2,b3
  b2,b3      -   {b2,b3}  {b2,b3,b4}

現在我需要在這里替換很多字符。 每下一列應包含上一列的值。 如果值是-或{-}表示前一個,如果不是,則也需要前一個。 所需的輸出:

source  next1  next2     next3
 b1      b1      b2     b1,b2,b3
 b2,b3   b2,b3   b2,bb3 b2,b3,b4

我已經嘗試過這樣的事情:

for val in df['source'].values:
    if values=b1:
        df['next1'].replace('{-},', 'b1,',regex=True, inplace=True)
        df['next1'].replace('-,', 'b1,',regex=True, inplace=True)

等等但是我有那么多行和條件,所以這行得很久,而且不夠精確,有錯誤。 將一個值(替換后)放入所有行。

我不認為您的問題有快速的解決方案,因為字符串操作總是很慢。 不過,有一個更好/更快的方法。

一個簡單的解決方案是

for i in range(1, df.shape(1)):  # here only order matters
    df.iloc[:, i].str.replace('{-}', '-', inplace=True)
    mask = df.iloc[:, i].str.contains('-')
    df.iloc[mask, i].str.replace('{-}', df.iloc[mask, i-1], inplace=True)

這樣,將所有列設置為集合({})並對其進行操作可能會更快。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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