Столбец Dataframe не читается как список в лямбда-функции - PullRequest
1 голос
/ 07 мая 2020
• 1000 функция для создания df1 ['score'], где значения получаются из суммирования слов для каждого списка в df1, которые находятся в словах df2. В настоящее время это мой код:
def score(list_word):
    sum = count = mean = sd = 0
    for word in list_word:
         if word in df2['Word']:
             sum = sum + df2.loc[df2['Word'] == word, 'Value'].iloc[0]
             count = count + 1
    if count != 0:
        return sum/count
    else:
        return 0

df['score'] = df.apply(lambda x: score(x['words']), axis=1)

Это то, что я представляю:

Score
-------
7.75 #average of good (7.47) and proud (8.03)
5.145 #average of honor (7.66) and guilty (2.63)

Однако кажется, что x ['words'] не прошел как объект списка, и я не знаю, как изменить функцию оценки в соответствии с типом объекта. Я пытаюсь преобразовать его методом tolist (), но безуспешно. Любая помощь приветствуется.

1 Ответ

1 голос
/ 07 мая 2020

Передача первого df1 и df2 с explode и map, уведомление explode после pandas 0,25

#import ast 
#df1.Text=df1.Text.apply(ast.literal_eval)
#If the list is string type , we need bring the format list back with fast 
s=df1.Text.explode().map(dict(zip(df2.Word,df2.Value))).mean(level=0)
0    7.750
1    5.145
Name: Text, dtype: float64

Обновление

df1.Text.explode().to_frame('Word').reset_index().merge(df2,how='left').groupby('index').mean()
       Value
index       
0      7.750
1      5.145
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...