我需要检查熊猫数据框的一列中的字符串是否在另一列中。
示例数据:

aa=['mma', 'sdas', 'asdsad']*1000
t=pd.DataFrame(aa)
a=['m', 'f', 'n']*1000
t1=pd.DataFrame(a)
t2=pd.concat([t,t1], axis=1)
t2.columns=['texto', 'textito']


使用lambda函数可以得到所需的东西,但是它太慢了:

t2['veo1'] = t2.apply(lambda row: int(row['textito'] in row['texto']),axis=1)



  t2 [:10]


    texto textito  veo1
0     mma       m     1
1    sdas       f     0
2  asdsad       n     0
3     mma       m     1
4    sdas       f     0
5  asdsad       n     0
6     mma       m     1
7    sdas       f     0
8  asdsad       n     0
9     mma       m     1


有没有办法更快地做到这一点?

谢谢。

最佳答案

如果空间足够,则可以通过对原始对象应用set来创建新的DataFrame。这样,成员资格测试将比对字符串使用in更快。

# setup
aa=['mma', 'sdas', 'asdsad']*1000
t=pd.DataFrame(aa)
a=['m', 'f', 'n']*1000
t1=pd.DataFrame(a)
df=pd.concat([t,t1], axis=1)
df.columns=['a', 'b']

# new DataFrame  using the set of the relevant columns
df2 = df.applymap(set)
# new column based on the membership test
df['v'] = df2.b <= df2.a

>>> df[:10]
        a  b      v
0     mma  m   True
1    sdas  f  False
2  asdsad  n  False
3     mma  m   True
4    sdas  f  False
5  asdsad  n  False
6     mma  m   True
7    sdas  f  False
8  asdsad  n  False
9     mma  m   True
>>>

关于python - Python 2.7-将功能应用于 Pandas 数据框的两列的最快方法,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/39312737/

10-13 07:31
查看更多