Pandas Dataframe分组依据,带有列表的列

时间:2019-04-01 19:56:59

标签: python pandas dataframe

我正在使用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

换句话说,如何按每行列表中的每个项目分组。

2 个答案:

答案 0 :(得分:1)

您可以使用unnesting idiom from this answer

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')

您现在可以在未嵌套的“ players_提及”列上调用groupby

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

  players_mentioned  polarity
0              Mane      0.12
1             Salah      0.09

答案 1 :(得分:0)

如果您只是想按提及的玩家分组,并获得该玩家的人气得分的平均值,则应该这样做。

df.groupby('players_mentioned').polarity.agg('mean')