首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何基于Python中的多列聚合数据

如何基于Python中的多列聚合数据
EN

Stack Overflow用户
提问于 2022-03-18 09:42:45
回答 2查看 92关注 0票数 0

我试图根据日期和类别列聚合文本字段。

及以下是初始数据集是如何与相似的。

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进行聚合。

代码语言:javascript
复制
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)
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2022-03-18 10:04:50

您可以使用:

代码语言:javascript
复制
out = df.groupby(['created_at', 'category'], sort=False, as_index=False)['tweet'] \
        .apply(lambda x: ' '.join(x))[df.columns]
print(out)

输出:

代码语言:javascript
复制
>>> 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
票数 1
EN

Stack Overflow用户

发布于 2022-03-18 09:58:07

首先,df是您的例子,tweet列使用groupby创建列表,应用连接列表。

代码语言:javascript
复制
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

产出:

代码语言:javascript
复制
    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...   sports
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/71525043

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档