在Pandas中的多列中替换具有不同条件的值

时间:2017-12-06 15:30:32

标签: python pandas dataframe

我有一个像这样的数据框但更大:

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)

等 但是我有很多行和condiditons,所以这很长,而不是精确的,有错误。将一个值(从替换)放到所有行。

1 个答案:

答案 0 :(得分:0)

我认为你的问题没有快速解决方案,因为字符串操作总是很慢。不过,有一个更好/更快的。

直接的解决方案是

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)

通过这种方式,将所有列设置为集合({})可能会更快,并且可以对它们进行操作。