Pandas - 如何根据其他列中的条件对一列中的句子求和,并将结果文档存储在列表中



我想创建一个文档列表。当"公司"和"日期"相同时,每个文档都是"文本"列中的组合句子。

为了说明,我有一个数据帧:

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

最新更新