我需要检查熊猫数据框的一列中的字符串是否在另一列中。
示例数据:
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/