【问题标题】:How to find the lowest number of a grouped dataframe in Python如何在 Python 中找到分组数据帧的最小数量
【发布时间】:2021-02-25 19:07:20
【问题描述】:

我有一张桌子,我想在我的桌子上找到与每个“leadId”相关联的最小数字。下面是它的快照:

Index leadId repId hoursSinceContacted
1 261 1111 10391
2 261 2222 10247
3 261 3333 1149
4 261 4444 10247
5 262 5555 551
6 262 6666 982
6 262 3333 214

是否有一个 groupby 语句我可以用来获得一个看起来像这样的表?:

Index leadId repId hoursSinceContacted
3 261 3333 1149
6 262 3333 214

任何建议将不胜感激。

【问题讨论】:

  • 你有没有自己尝试过任何你愿意分享的东西?

标签: python python-3.x pandas dataframe pandas-groupby


【解决方案1】:

Groupby 然后min

>>> df.groupby('leadId').min()
        Index  repId  hoursSinceContacted
leadId                                   
261         1   1111                 1149
262         5   3333                  214

根据@ALoliz 评论更新,如果您想要与min(hoursSinceContacted) 对应的行

df.loc[df.groupby('leadId')['hoursSinceContacted'].idxmin()]

   Index  leadId  repId  hoursSinceContacted
2      3     261   3333                 1149
6      6     262   3333                  214

【讨论】:

  • 我。不能。相信。那。修复。谢谢你。我一直在尝试非常复杂的 group bys,但没有任何效果......除了最简单的解决方案。再次感谢您
  • 是的,这发生在我们所有人身上。对于 pandas,几乎总是有一个简单的单行解决方案,+1。欢迎您
  • @KaelanMcGurk 我不认为这是正确的这单独考虑每个字段的min,因此它们可以来自不同的行。 (查看输出中的索引如何为 5,而不是 6)。根据您的输出,您似乎想要整行,基于每个leadId 的最小值hoursSinceContacted
  • @ALollz 我明白你的意思。当我查看我的新数据框并使用我的数据库中的多个表交叉引用它时,数据框看起来是正确的。我不确定为什么我没有收到您所说的错误,但在这一点上我不想质疑它。
  • 谢谢。我测试了更新,它比第一个更正确。
【解决方案2】:

你可以这样做:

df.groupby('leadid').agg({'hoursSinceContacted' : 'min'}).reset_index()

【讨论】:

    【解决方案3】:

    尝试使用 as_index=False

    df.groupby(['leadid'],as_index=False).agg({'hoursSinceContacted':['min','max']})
    
    
    or
    
    fp = df.pivot_table( columns='leadId', values='hoursSinceContacted', aggfunc={'min'})
    print(fp)
    

    输出:

    leadId   261  262
    min     1149  214
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-08-18
      • 2013-03-30
      • 2023-01-12
      • 2020-06-17
      • 1970-01-01
      • 2021-04-20
      • 2019-06-13
      • 2017-05-19
      相关资源
      最近更新 更多