我有一个像这样的数据框但更大:
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,所以这很长,而不是精确的,有错误。将一个值(从替换)放到所有行。
答案 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)
通过这种方式,将所有列设置为集合({})可能会更快,并且可以对它们进行操作。