目前我有两个数据集,一个有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)
df1 = list of items from the column to be comapred in second dataset (df['description'].str.lower()).str.findall(r'b({})b'.format(df1))
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