Группировать твиты по нескольким хэштегам python - PullRequest
0 голосов
/ 15 мая 2018

Я пытаюсь сгруппировать твиты вместе в pandas df на основе хэштегов, которые также находятся в отдельном столбце.

import pandas as pd


data = {'tweets':['I #love #dogs','I hate #cats','Missing my #dogs', 'I love sardines in mustard sauce', 'Hello world'],'hashtags':['love dogs','cats','dogs','NaN','NaN']}

df = pd.DataFrame(data, columns = ['tweets', 'hashtags'])
df

Я создал набор уникальных хэштегов

 array = df.hashtags.apply(str.split)
 hashtags_unique = set(x for l in array for x in l)
 hashtags_unique

Я хочу, чтобы результатом был фрейм данных с каждым твитом, сгруппированным по уникальному хэштегу и его собственной строке, если он не содержит хэштегов,Твиты с более чем одним хэштегом будут объединены в обе строки:

data2 = {'merged_tweets':['I love dogs Missing my dog','I hate cats','I love dogs', 'I love sardines in mustard sauce','Hello world'],'merged_on':['dogs','cats','love','NaN','NaN']}

df2 = pd.DataFrame(data2, columns = ['merged_tweets','merged_on'])
df2

1 Ответ

0 голосов
/ 15 мая 2018
df3 = pd.DataFrame({"a": df.tweets.str.replace("#","").repeat(df.hashtags.str.split(" ").apply(len)).reset_index().tweets, 
              "b": df.hashtags.str.split(" ").apply(pd.Series).stack().reset_index()[0].replace("NaN", np.nan)})
df4 = pd.concat([df3.groupby("b").a.agg(" ".join).reset_index(), df3[df3.b.isna()]])
df4.columns = ["merged_tweets", "merged_on"]

    merged_tweets                      merged_on
0   I hate cats                        cats
1   I love dogs Missing my dogs        dogs
2   I love dogs                        love
4   I love sardines in mustard sauce   NaN
5   Hello world                        NaN

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


Но идея состояла в том, чтобы создать промежуточный фрейм данных (df3 выше), который облегчает группирование и agg группирование с помощью " ".join. df3 выглядит так:

    a                                   b
0   I love dogs                         love
1   I love dogs                         dogs
2   I hate cats                         cats
3   Missing my dogs                     dogs
4   I love sardines in mustard sauce    NaN
5   Hello world                         NaN

Надеюсь, это поможет

...