【问题标题】:Python Pandas unique valuesPython Pandas 的独特价值
【发布时间】:2017-07-29 21:15:57
【问题描述】:
df = pd.DataFrame({"ID":['A','B','C','D','E','F'],
               "IPaddress":['12.345.678.01','12.345.678.02','12.345.678.01','12.345.678.18','12.345.678.02','12.345.678.01'], 
               "score":[8,9,5,10,3,7]})

我正在使用 Python 和 Pandas 库。对于那些具有重复 IP 地址的行,我只想选择得分最高的一行(得分从 0-10),然后删除所有重复项。

我很难将此逻辑转换为 Python 函数。

【问题讨论】:

  • df.loc[df.groupby('IPaddress')['score'].idxmax()]
  • Johnny,看起来您可能是 Stack 的新手,并且想知道为什么您可能会因为看似“正常”的问题而被否决。投反对票的原因是您没有发布您尝试过的内容,并且某些用户可能会认为我们正在“做你的功课”。事实上,这个问题和论坛上的其他人非常相似。将来,发布您尝试过的代码。阅读documentation 以获得更好的理解。我们祝你一切顺利,我希望你继续回来!
  • 非常好。下次我会确保在帖子中包含我尝试过的内容。谢谢马特

标签: python-3.x pandas


【解决方案1】:

第一步:使用 Pandas 的 groupby 功能,将 df 拆分为 IPaddress 组。

df.groupby('IPaddress')

这样的结果将创建一个 groupby 对象。一旦你检查了这个对象的类型,它将如下:pandas.core.groupby.groupby.DataFrameGroupBy

第 2 步:使用从第 1 步创建的 Pandas groupby 对象,使用 .idxmax() 覆盖分数,将返回每个 IP 地址的最大分数的 Pandas 系列

df.groupby('IPaddress').score.idxmax()

(可选)第 3 步:如果要将上述系列转换为数据框,可以执行以下操作:

df.loc[df.groupby('IPaddress').score.idxmax(),['IPaddress','score']]

在这里,您将选择所有得分最高的行,并显示 IP 地址、得分列。

有用的参考: 1.https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.DataFrame.loc.html

  1. https://pandas.pydata.org/pandas-docs/version/0.22/groupby.html

  2. https://www.geeksforgeeks.org/python-pandas-dataframe-idxmax/

【讨论】:

  • 虽然这段代码 sn-p 可以解决问题,including an explanation 确实有助于提高您的帖子质量。请记住,您是在为将来的读者回答问题,而这些人可能不知道您提出代码建议的原因。
猜你喜欢
  • 2021-09-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-22
相关资源
最近更新 更多