我有一个pandas数据框,如下所示。该框架中有许多列对于任务而言并不重要。
id pos value sente
1 a I 21
2 b have 21
3 b a 21
4 a cat 21
5 d ! 21
1 a My 22
2 a cat 22
3 b is 22
4 a cute 22
5 d . 22
我现在想要对sente = sente中的所有行进行分组,并将值中的单词连接起来以形成列表中的句子。所以输出应该看起来像这样(一个由逗号分隔的字符串列表):
[“我有一只猫!”,“我的猫很可爱。”]
我想第一步是使用groupby(“sente”)
fill = (df.groupby("sente").apply(lambda df: df["value"].values)).reset_index().rename(columns={0: "content"})
fill = [word for word in fill["content"]
但是这样做我得到了这个输出:
print(fill):
[array(['I','have','a','cat','!'],dtype=object), array(['My','cat','is','cute','.'],dtype=object)]
有没有办法连接句子中的所有单词而不将它们标记为单独的字符串并删除数组和dtype部分?
答案 0 :(得分:3)
您需要加入所有值而不是最后一个空格,然后附加它:
L = (df.groupby("sente")['value']
.apply(lambda x: ' '.join(x.iloc[:-1]) + x.iloc[-1])
.tolist())
print (L)
['I have a cat!', 'My cat is cute.']
因为在!
和.
之前还有不必要的空格:
print (df.groupby("sente")['value'].apply(' '.join).tolist())
['I have a cat !', 'My cat is cute .']