所以我有一个包含列' body'的pandas数据框。和' tag_text'。正文是一些文本,而tag_text是给予该文本的标记。数据框的结构如下
例:
body,tag_text
"嗨","问候"
"嗨","英语"
" adios","告别"
" adios","西班牙语"
所以,我的问题是如何有效地创建一个新的数据帧:
例:
body,tag_text
"嗨",["问候","英语"]
" adios",["告别","西班牙语"]
这是我快速而肮脏的方式,但效率很低。所以,如果人们有更好的想法,我会感兴趣。
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})
答案 0 :(得分:2)
您可以使用DataFrame.groupby:
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]