【问题标题】:Group by pandas data frame unique first values - numpy array returned按熊猫数据框唯一的第一个值分组-返回的numpy数组
【发布时间】:2018-03-30 03:17:18
【问题描述】:

来自两个字符串列的 pandas 数据框看起来像:

d = {'SCHOOL' : ['Yale', 'Yale', 'LBS', 'Harvard','UCLA', 'Harvard', 'HEC'],
     'NAME' : ['John', 'Marc', 'Alex', 'Will', 'Will','Miller', 'Tom']}

df = pd.DataFrame(d)

注意 NAME 与 SCHOOL 之间的关系是 n 比 1。 如果一个人去了两所不同的学校,我想得到最后一所学校(参见“Will”案例)。

到目前为止,我得到了:

df = df.groupby('NAME')['SCHOOL'].unique().reset_index()

返回:

     NAME           SCHOOL
0    Alex            [LBS]
1    John           [Yale]
2    Marc           [Yale]
3  Miller        [Harvard]
4     Tom            [HEC]
5    Will  [Harvard, UCLA]

问题:

  • unique() 不仅返回最后一所学校,还返回两所学校。
  • 此行将 SCHOOL 列作为 np.array 而不是字符串返回。很难用这个 df 进一步工作。

【问题讨论】:

  • 试试last 而不是unique
  • 感谢@IanS!这可以摆脱所有学校的 np.array ,但遗嘱的学校。对此有什么想法吗?
  • 我的错...我没有重新定义df 变量。 last() 完美运行。谢啦!!我是 python 的新手,如果你不介意你能解释一下为什么last() 有效吗? (Pandas 文档对我帮助不大……)
  • last 是 groupby 之后可用的聚合函数之一,显然是您正在寻找的那个。有关聚合的一般想法,请参见例如 here。或者查看 here 以获取 groupby 对象上可用的聚合函数的完整列表。
  • 非常感谢!我会用你的评论来回答这个问题。

标签: python pandas numpy group-by unique


【解决方案1】:

这两个问题都是基于@IanS cmets 解决的。

使用last() 代替unique()

df = df.groupby('NAME')['SCHOOL'].last().reset_index()

返回:

     NAME   SCHOOL
0    Alex      LBS
1    John     Yale
2    Marc     Yale
3  Miller  Harvard
4     Tom      HEC
5    Will     UCLA

【讨论】:

    【解决方案2】:

    使用drop_duplicates 和参数last 并指定检查重复的列:

    df = df.drop_duplicates('NAME', keep='last')
    print (df)
         NAME   SCHOOL
    0    John     Yale
    1    Marc     Yale
    2    Alex      LBS
    4    Will     UCLA
    5  Miller  Harvard
    6     Tom      HEC
    

    如果需要排序添加sort_values:

    df = df.drop_duplicates('NAME', keep='last').sort_values('NAME')
    print (df)
         NAME   SCHOOL
    2    Alex      LBS
    0    John     Yale
    1    Marc     Yale
    5  Miller  Harvard
    6     Tom      HEC
    4    Will     UCLA
    

    【讨论】:

      猜你喜欢
      • 2019-05-11
      • 1970-01-01
      • 2022-07-15
      • 1970-01-01
      • 1970-01-01
      • 2018-02-01
      • 2017-10-17
      • 1970-01-01
      • 2021-03-16
      相关资源
      最近更新 更多