我想创建一个文档列表。当"公司"和"日期"相同时,每个文档都是"文本"列中的组合句子。
为了说明,我有一个数据帧:
df = pd.DataFrame(np.array([['28/02/2017', 'Apple', "A"], ['28/02/2017', 'Apple', "B"], ['30/03/2017', 'Apple', "C"],
['30/03/2017', 'Apple', "D"], ['30/02/2017', 'Amazon', "E"]]),
columns=['date', 'company', 'text'])
我想要的输出是一个包含以下句子的列表:
documents = ["AB", "CD", "E"]
到目前为止,我考虑创建一个"组"列,该列将为公司和日期组合分配组号。根据组号,我可以对文本求和。
我尝试创建一个函数来分配这些组号:
def label_groups(x, count):
if x['date'] == x['company']:
return count
else:
count = count+1
df['group'] = df.apply(lambda x: label_groups(x, 0), axis=1)
但这不起作用(它为每一行返回"None"(。
也许这是一个不必要的复杂方法,并且有一种更简单的方法可以实现我想要的输出?
您可以groupby
两列并使用join
聚合:
l = df.groupby(['date', 'company'], sort=False).text.agg(''.join).values.tolist()
print(l)
# ['AB', 'E', 'CD']