【发布时间】:2020-01-24 03:37:53
【问题描述】:
我有一个函数可以将字符串拆分为单词,然后在数据框中找到该单词,如果找到它,则使用 for 循环搜索该行,我不想这样做,因为它会使它太慢数据集。我想使用 row[value],并且不想为每个匹配的单词循环整个 df。
我是 python 新手,我已经搜索了很多,但可以得到我想要的,我找到了 index.tolist() 但我不想列出,我只需要第一个匹配值的索引.
任何帮助或解决方法将不胜感激。
def cal_nega_mean(my_string):
mean = 0.00
mean_tot = 0
mean_sum = 0.00
for word in my_string.split():
if word in df.values: #at this point if it founds then get index, so that i dont have to use for loop in next line
for index, row in df.iterrows(): #want to change
if word == row.word: # this part
if row['value'] < -0.40:
mean_tot += 1
mean += row['value']
break
if mean_tot == 0:
return 0
mean = mean_sum / mean_tot
return round(mean,2)
示例字符串输入,超过300k字符串
my_string = "i have a problem with my python code"
cal_nega_mean(my_string)
# and i am using this to get return for all records
df_tweets['intensity'] = df_tweets['tweets'].apply(lambda row: cal_nega_mean(row))
要搜索的数据框
df
index word value ...
1 python -0.56
2 problem -0.78
3 alpha -0.91
. . .
9000 last -0.41
【问题讨论】:
-
您能否发布一些具有预期输出的数据。我很确定有一种方法可以在不循环的情况下完成此操作。
-
使用
pandas时,最好尝试使用矢量化函数来完成您想要的,因为它更快。如果您可以向我们展示输入和输出,它将更有帮助 -
@ScottBoston 添加了完整的代码和数据示例
-
您阅读过 Pandas 文档吗?显式循环很少是正确的选择。