为了账号安全,请及时绑定邮箱和手机立即绑定

按 Pandas 数据分组并保留值

按 Pandas 数据分组并保留值

蓝山帝景 2023-05-23 16:30:03
我有一个看起来像这样的数据框| | Sentence | Text  | Classes  0     1        a      Object 1     1        a      Object 2     1        a      Object 3     1        a      Object 4     1      school   Depart 5     1        is     Verb 6     1      closed   O . . .    60         a     Verb我想按最常见的类类型对文本进行分组,所以它的结尾是这样的:| | Sentence | Text  | Classes  0     1        a      Object 1     1        is     Verb 2     1      school   Depart 3     1      closed   O对数据进行分组时保持句子顺序非常重要,当我尝试使用以下代码时,它确实对数据进行了分组,但只删除了一次出现的条目:def md(s):c = Counter(s)return c.most_common(1)[0][0]df_final = df.groupby(['Sentence','Text']).Classes.agg(md)
查看完整描述

1 回答

?
catspeake

TA贡献1111条经验 获得超0个赞

看来您的函数没有删除一次出现的条目(即该组的记录数)。


如果你想保持句子中单词的顺序,你可以添加as_index=False, sort=Falseas 选项groupby,如果这就是你所说的“分组数据时保持句子顺序”的意思。


import pandas as pd

import re

from collections import Counter


data = [['1', '1', '1', '1', '1', '1', '1'],

        ['a', 'a', 'a', 'a', 'school', 'is', 'closed'],

        ['Object', 'Object', 'Object', 'Object', 'Depart', 'Verb', 'O']]


d = {'Sentence': data[0], 'Text': data[1], 'Classes': data[2]}

df = pd.DataFrame(data=d)

def md(s):

    c = Counter(s)

    return c.most_common(1)[0][0]

df_final = df.groupby(['Sentence','Text'], as_index=False, sort=False).Classes.agg(md)

print(df_final)

输出:


  Sentence    Text Classes

0        1       a  Object

1        1  school  Depart

2        1      is    Verb

3        1  closed       O


查看完整回答
反对 回复 2023-05-23
  • 1 回答
  • 0 关注
  • 167 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信