来自R,我无法弄清楚如何通过利用其他列对一个数据框列进行某种矢量化操作,例如:
import pandas as pd
df = pd.DataFrame({'s':['Big bear eats cat','cute cat sleeps'],'a':['bear','cat']})
现在我只想用ANIMAL逐行替换(其他操作可以拆分)出现in的情况,所以看起来像这样:
0 Big ANIMAL eats cat
1 cute ANIMAL sleeps
在R data.table(带有矢量化函数)中,我只会写类似
df[,s:=str_replace(s,a,"ANIMAL")]
我看到我也许可以使用apply了,但是对于这样一个简单的案例,这似乎仍然很复杂
答案 0 :(得分:1)
您可以使用列表理解:
df['s'] = [' '.join([i if i!=a else 'ANIMAL' for i in s.split()]) \
for a, s in zip(df['a'], df['s'])]
print(df)
a s
0 bear Big ANIMAL eats cat
1 cat cute ANIMAL sleeps
答案 1 :(得分:1)
我发现以下解决方案通过对str.replace进行矢量化(需要numpy)来实现与我在R中使用的相同的方法:
import numpy as np
df['s']=np.vectorize(str.replace)(df['s'],df['a'],"ANIMAL")
print(df)
a s
0 bear Big ANIMAL eats cat
1 cat cute ANIMAL sleeps