Pandas Dataframe group by, столбец со списком - PullRequest
2 голосов
/ 01 апреля 2019

Я использую ноутбуки Jupyter, мой текущий фрейм данных выглядит следующим образом:

players_mentioned  |  tweet_text    |  polarity
______________________________________________
[Mane, Salah]      |  xyz           |    0.12
[Salah]            |  asd           |    0.06

Как я могу сгруппировать всех игроков по отдельности и усреднить их полярность?

В настоящее время я пытался использовать:

df.groupby(df['players_mentioned'].map(tuple))['polarity'].mean()

Но это вернет фрейм данных, объединяющий все упоминания, когда они вместе, а также отдельно, как лучше всего разделить игроков, а затем сгруппировать их вместе.

Anожидаемый результат будет содержать

 player  | polarity_average
____________________________
  Mane   |   0.12
  Salah  |   0.09

Другими словами, как группировать по каждому элементу в списках в каждой строке.

Ответы [ 2 ]

1 голос
/ 01 апреля 2019

вы можете использовать идиому 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 в необъявленном столбце "Players_mentioned".

(unnesting(df, ['players_mentioned'])
    .groupby('players_mentioned', as_index=False).mean())

  players_mentioned  polarity
0              Mane      0.12
1             Salah      0.09
0 голосов
/ 01 апреля 2019

Если вы просто ищете группу по Players_mentioned и получите среднюю оценку за этот рейтинг популярности игроков, это должно быть сделано.

df.groupby('players_mentioned').polarity.agg('mean')
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...