我试图根据日期和类别列聚合文本字段。
及以下是初始数据集是如何与相似的。
created_at,tweet,类别
2021年7月29日,伦敦板球运动日
2021年7月29日,英格兰队大比分,体育
2021年7月29日,主席发表明确声明,政治
2021年7月29日,奥运会将在日本举行,体育
2021年7月29日,一起恐怖袭击已造成10人死亡,犯罪
2021年7月29日,明年将举行一次政治选举。
2021年8月29日,斯利兰卡输掉了T20系列赛,体育比赛
2021年8月29日,澳大利亚赢得了系列赛,体育比赛。
2021年8月29日,部长上星期一放弃了他的政治角色
2021年8月29日,总统正在挑战相反的领导人,政治
,所以我想得到的预期输出是下面的
created_at,tweet,类别
2021年7月29日,伟大的板球日在伦敦举行,由英国击打奥运会带来的大比分将在日本举行,体育比赛
2021年7月29日,总统发表了一项明确的声明:明年将举行选举,政治
2021年7月29日,一起恐怖袭击已造成10人死亡,犯罪
2021年8月29日,斯利兰卡先后输掉了澳大利亚T20系列赛的冠军,体育比赛。
2021年8月29日,部长已经放弃了他的职位,总统正在挑战相反的领导人,政治
作为示例,我实际上希望根据日期和类别聚合tweet文本。下面是我过去在不考虑类别的情况下进行聚合的方法,如果任何人都能回答这个问题,我需要按照输出above.It进行聚合。
import pandas as pd
def aggregated():
tweets = pd.read_csv(r'data_set.csv')
df = pd.DataFrame(tweets, columns=['created_at', 'tweet'])
df['created_at'] = pd.to_datetime(df['created_at'])
df['tweet'] = df['tweet'].apply(lambda x: str(x))
pd.set_option('display.max_colwidth', 0)
df = df.groupby(pd.Grouper(key='created_at', freq='1D')).agg(lambda x: ' '.join(set(x)))
return df
# Driver code
if __name__ == '__main__':
print(aggregated())
aggregated().to_csv(r'agg-1.csv',index = True, header=True)发布于 2022-03-18 10:04:50
您可以使用:
out = df.groupby(['created_at', 'category'], sort=False, as_index=False)['tweet'] \
.apply(lambda x: ' '.join(x))[df.columns]
print(out)输出:
>>> out
created_at tweet category
0 7/29/2021 Great Sunny day for Cricket at London Great Score put on by England batting Olympic is to held in Japan sports
1 7/29/2021 President Made a clear statement An election is to be kept next year politics
2 7/29/2021 A terrorist attack have killed 10 people crime
3 8/29/2021 Srilanka have lost the T20 series Australia have won the series sports
4 8/29/2021 Minister have given up his role last monday President is challenging the opposite leader politics发布于 2022-03-18 09:58:07
首先,df是您的例子,tweet列使用groupby创建列表,应用连接列表。
df = df.groupby(["created_at", "category"], as_index=False)["tweet"].agg(lambda x: list(x))
df["tweet"] = df1["tweet"].apply(lambda x:" ".join(x))
df = df.reindex(columns=["created_at", "tweet", "category"])
df产出:
created_at tweet category
0 7/29/2021 A terrorist attack have killed 10 people crime
1 7/29/2021 President Made a clear statement An election i... politics
2 7/29/2021 Great Sunny day for Cricket at London Great Sc... sports
3 8/29/2021 Minister have given up his role last monday Pr... politics
4 8/29/2021 Srilanka have lost the T20 series Australia ha... sportshttps://stackoverflow.com/questions/71525043
复制相似问题