我正在尝试在一个基于主题标签的pandas df中将推文组合在一起,这些标签也在一个单独的列中。
SetStackClass()
我创建了一组独特的标签
IdStack
我希望结果是一个数据帧,每个推文按唯一的主题标签和自己的行分组,如果它不包含主题标签。具有多个主题标签的推文将合并到两个字符串中:
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
答案 0 :(得分:0)
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
希望有所帮助