python - 根据多种条件过滤数据框

标签 python pandas time-series

这是我的问题:

我有一个看起来像这样的数据框:

Date  Name  Score  Country
2012  Paul    45    Mexico
2012  Mike    38    Sweden
2012  Teddy   62    USA 
2012  Hilary  80    USA 
2013  Ashley  42    France 
2013  Temari  58    UK 
2013  Harry   78    UK
2013  Silvia  55    Italy

我想选择两个最好的分数,按日期筛选,也来自不同的国家。

例如:在 2012 年,希拉里 (Hilary) 的得分最高(美国),因此她将被选中。 Teddy在2012年获得第二好成绩,但他不会被选中,因为他来自同一个国家(美国) 因此,保罗将被选中,因为他来自不同的国家(墨西哥)。

这是我做的:

df = pd.DataFrame(
    {'Date':["2012","2012","2012","2012","2013","2013","2013","2013"],
     'Name': ["Paul", "Mike", "Teddy", "Hilary", "Ashley", "Temaru","Harry","Silvia"],
     'Score': [45, 38, 62, 80, 42, 58,78,55],
     "Country":["Mexico","Sweden","USA","USA","France","UK",'UK','Italy']})

然后我按日期和分数制作过滤器:

df1 = df.set_index('Name').groupby('Date')['Score'].apply(lambda grp: grp.nlargest(2))

但我真的不知道,也不知道如何进行考虑到他们必须来自不同国家的过滤器。

有人对此有想法吗?非常感谢你

编辑:我正在寻找的答案应该是这样的:

Date  Name  Score  Country
2012  Hilary  80    USA 
2012  Paul    45    Mexico
2013  Harry   78    UK
2013  Silvia  55    Italy

按日期、最佳分数和来自不同国家/地区过滤两个人

最佳答案

sort_values + tail

s=df.sort_values('Score').drop_duplicates(['Date','Country'],keep='last').groupby('Date').tail(2)
s
   Date    Name  Score Country
0  2012    Paul     45  Mexico
7  2013  Silvia     55   Italy
6  2013   Harry     78      UK
3  2012  Hilary     80     USA

关于python - 根据多种条件过滤数据框,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62096059/

相关文章:

python - 如何读取和写入单个目录中的多个文件? Python

Python for Smartsheet - 获取 _ipython_canary_method_should_not_exist_

python - 从 python 实现 R 包 TSdist

python - 我如何删除条件列值上的全天行..pandas

Python,双重自动枚举defaultdict

python - python 2.7 中来自 googlefinance 的 HTTP 错误 404

python - 如何使用 pandas 根据用户输入另一列来输出特定列?

python - 沿一列将 DataFrame 从长到宽 reshape

python - 使用 SQL 查询结果列名作为 pandas dataframe 列名

r - 计算ts对象的月平均值