首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >如何根据一列的重复条目合并另一列的数据框条目

如何根据一列的重复条目合并另一列的数据框条目
EN

Stack Overflow用户
提问于 2018-06-08 03:52:17
回答 1查看 25关注 0票数 0

所以我有一个包含'body‘和'tag_text’列的pandas数据帧。Body是一些文本,而tag_text是赋予该文本的标记。数据帧的组织方式如下

  • 每个正文只有一个标记
  • 具有多个标记的正文由数据帧中该正文的重复条目表示,每个条目具有不同的tag_text值。

示例:

body,tag_text

“嗨”,“问候”

"hi","english“

“再见”,“永别了”

“再见”,“西班牙语”

因此,我的问题是如何有效地创建一个新的数据帧,以便:

  • 每个正文只在数据帧中出现一次
  • 每个正文的tag_text字段现在是一个标签列表,其中包含与该正文对应的所有标签。

示例:

body,tag_text

"hi","greeting","english“

“再见”,“再见”,“西班牙语”

这是我又快又脏的方法,但它的效率相当低。所以如果人们有更好的想法我会很感兴趣。

代码语言:javascript
复制
def mergeTagsByBody(df):
    bodies = df['body']
    unique_bodies = list(set(bodies))   

    unique_tags = []
    for body in unique_bodies:
        body_tags = df[df['body'] == body]['tag_text']
        unique_tags.append(body_tags)

    return pd.DataFrame({'body': unique_bodies, 'tag_text': unique_tags})
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-06-08 04:18:34

您可以使用DataFrame.groupby来实现此目的:

代码语言:javascript
复制
df = pd.DataFrame(
    [["hi", "greeting"], 
     ["hi", "english"], 
     ["adios", "farewell"], 
     ["adios", "spanish"]], 
    columns=["body", "tag_text"]
)

def tags_to_list(g):
    tags = list(g["tag_text"])
    return pd.DataFrame([[g["body"].iloc[0], tags]], columns=["body", "tags"])

(df.groupby("body")
   .apply(tags_to_list)
   .reset_index(drop=True))
#     body                 tags
# 0  adios  [farewell, spanish]
# 1     hi  [greeting, english]
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50749224

复制
相关文章

相似问题

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