所以我有一个包含'body‘和'tag_text’列的pandas数据帧。Body是一些文本,而tag_text是赋予该文本的标记。数据帧的组织方式如下
示例:
body,tag_text
“嗨”,“问候”
"hi","english“
“再见”,“永别了”
“再见”,“西班牙语”
因此,我的问题是如何有效地创建一个新的数据帧,以便:
示例:
body,tag_text
"hi","greeting","english“
“再见”,“再见”,“西班牙语”
这是我又快又脏的方法,但它的效率相当低。所以如果人们有更好的想法我会很感兴趣。
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})
发布于 2018-06-08 04:18:34
您可以使用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]
https://stackoverflow.com/questions/50749224
复制相似问题