根据熊猫中其他列的内容来操作列

时间:2018-08-08 08:20:29

标签: python string python-3.x pandas dataframe

来自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了,但是对于这样一个简单的案例,这似乎仍然很复杂

2 个答案:

答案 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