比较一个数据框列与另一个数据框列的字符串匹配



目前我有两个数据集,一个有10万行,另一个有25000行,我比较从第二个数据集的列包含在第一个数据集的列。

我对string使用列表推导式。findall操作,我可以达到结果,但问题是效率。计算这个操作大约需要12分钟。我使用Dask进行计算,它大大减少了时间,但转换回pandas数据框架需要12分钟的时间。

试了三次:

1。

df['first_name'] = df.apply(lambda x: True if any(word in str(x.description) 
for word in first_name_list) else False, axis=1)

  1. df1 = list of items from the column to be comapred in second dataset
    (df['description'].str.lower()).str.findall(r'b({})b'.format(df1))
    
  1. Dask

都需要12+分钟的时间

详细信息:

我想用匹配的结果填充列,例如:df1:错误id |描述||---------|--------------------------------------------|世界不是小的,但是是的|12w12q |时间不够CCCC AAAA |

df2:|id |first_name ||---|-----|{1} aaaa|2 | bbbb ||3 | cccc |现在,我应该在df1中插入一个用于检索名称的新列df1:|error_id| description |First_name||--------|---------------------------------------|----------|世界不是小的,但是是的,BBBB,BBBB|12w12q |时间不够CCCC AAAA |CCCC,AAAA |

整个问题的本质是您正在尝试迭代地解决它,也就是说,一次一行。我们都这么喜欢熊猫的原因是因为它一次做所有的事情。有人说是矢量化了

进口熊猫

import pandas as pd

第一个Dataframe

df1 = pd.DataFrame(
['some', 'group', 'of', 'strings', 'with', 'words', 'like', 'cat', 'dog'], columns=['Words']
)

第二Dataframe

df2 = pd.DataFrame(
['cat', 'fish', 'dog', 'goat', 'chicken'], columns=['Animals']
)

df1


Words
0     some
1    group
2       of
3  strings
4     with
5    words
6     like
7      cat
8      dog


df2


Animals
0      cat
1     fish
2      dog
3     goat
4  chicken

发现df1['Words']列中的某项是否在df2[' animals ']列中

words_in_animals_condition = df1['Words'].isin(df2['Animals'])
print(words_in_animals_condition)
0    False
1    False
2    False
3    False
4    False
5    False
6    False
7     True
8     True
Name: Words, dtype: bool

发现df1[' words ']中哪些单词属于df2['Animals']列

words_in_animals = df1.loc[words_in_animals_condition]
print(words_in_animals)
Words
7   cat
8   dog

相关内容

  • 没有找到相关文章

最新更新