Я использую ноутбуки jupyter, мой текущий фрейм данных выглядит следующим образом:
players_mentioned | tweet_text | polarity
______________________________________________
[Mane, Salah] | xyz | 0.12
[Salah] | asd | 0.06
Как я могу сгруппировать всех игроков по отдельности и усреднить их полярность?
В настоящее время я пытался использовать:
df.groupby(df['players_mentioned'].map(tuple))['polarity'].mean()
Но это вернет фрейм данных, сгруппирующий все упоминания как вместе, так и по отдельности, как лучше всего разделить игроков, а затем снова сгруппировать их вместе.
Ожидаемый результат будет содержать
player | polarity_average
____________________________
Mane | 0.12
Salah | 0.09
Другими словами, как сгруппировать по каждому элементу в списках в каждой строке.
Добавлен ожидаемый результат @coldspeed . Я понимаю, что моя попытка неверна, поэтому мне нужно руководство
Спасибо, это было полезно.
Не могли бы вы запустить result.loc[result['players_mentioned'].str.contains('Alderweireld'), 'players_mentioned'].tolist() результирующий df из моего кода и сказать мне, каков результат?
Я вижу проблему, в начале имени есть пробел, спасибо






Если вы просто хотите сгруппировать по упомянутым игрокам и получить средний показатель популярности этих игроков, это должно сработать.
df.groupby('players_mentioned').polarity.agg('mean')
Это не дает ожидаемого результата OP.
вы можете использовать unnesting идиома из этого ответа.
def unnesting(df, explode):
idx = df.index.repeat(df[explode[0]].str.len())
df1 = pd.concat([
pd.DataFrame({x: np.concatenate(df[x].values)}) for x in explode], axis=1)
df1.index = idx
return df1.join(df.drop(explode, 1), how='left')
Теперь вы можете вызвать groupby в невложенном столбце «упомянутые игроки».
(unnesting(df, ['players_mentioned'])
.groupby('players_mentioned', as_index=False).mean())
players_mentioned polarity
0 Mane 0.12
1 Salah 0.09
Большое спасибо! Отлично сработало :)
Ваш предпринятый код даже близко не соответствует тому, что вы пытаетесь сделать. Не могли бы вы объяснить, что вы имеете в виду под «разбить их»? Было бы полезно увидеть ожидаемый результат.