Python 3.x 根据另一列选择前n列

Python 3.x 根据另一列选择前n列,python-3.x,pandas,sorting,filtering,Python 3.x,Pandas,Sorting,Filtering,我有一个数据库,如下所示: 我想获得一个熊猫数据框,根据人口最多的前几行,为每个日期过滤2行。输出应如下所示: 我知道熊猫提供了一种叫做NLAGEST的配方: 但是我认为它不适用于这个用例。有什么解决办法吗 非常感谢 我模拟了您的数据帧,如下所示,并提供了获得所需数据帧的方法,希望这会有所帮助 您的数据帧: 您想要的解决方案: 您可以使用nlargest方法以及set\u indexansgroupby方法 这就是你将得到的 >>> df.set_index('count

我有一个数据库,如下所示:

我想获得一个熊猫数据框,根据人口最多的前几行,为每个日期过滤2行。输出应如下所示:

我知道熊猫提供了一种叫做NLAGEST的配方:

但是我认为它不适用于这个用例。有什么解决办法吗


非常感谢

我模拟了您的数据帧,如下所示,并提供了获得所需数据帧的方法,希望这会有所帮助

您的数据帧: 您想要的解决方案: 您可以使用
nlargest
方法以及
set\u index
ans
groupby
方法

这就是你将得到的

>>> df.set_index('country').groupby('Date')['population'].nlargest(2)
Date        country
2019-12-31  C          1000
            A           100
2020-01-01  C          3500
            A           200
2020-02-01  D          2000
            E            54
Name: population, dtype: int64
现在,由于您希望通过重置数据帧的索引使数据帧进入原始状态,这将为您提供以下信息

>>> df.set_index('country').groupby('Date')['population'].nlargest(2).reset_index()
        Date country  population
0 2019-12-31       C        1000
1 2019-12-31       A         100
2 2020-01-01       C        3500
3 2020-01-01       A         200
4 2020-02-01       D        2000
5 2020-02-01       E          54
另一种方法是: 使用
groupby
apply
函数使用
reset_index
参数
drop=True
level=

>>> df.groupby('Date').apply(lambda p: p.nlargest(2, columns='population')).reset_index(level=[0,1], drop=True)
  # df.groupby('Date').apply(lambda p: p.nlargest(2, columns='population')).reset_index(level=['Date',1], drop=True)
        Date country  population
0 2019-12-31       C        1000
1 2019-12-31       A         100
2 2020-01-01       C        3500
3 2020-01-01       A         200
4 2020-02-01       D        2000
5 2020-02-01       E          54

也许您可以
对值进行排序(按
['Date','Population']
)并使用
groupby
(按
'Date'
)?最好将数据粘贴为post的一部分,而不是图像。它帮助人们测试你的数据并给出正确答案。任何时候把代码或数据作为image@iraciv94,如果你喜欢这个答案,你也可以投它一票✔
>>> df.groupby('Date').apply(lambda p: p.nlargest(2, columns='population')).reset_index(level=[0,1], drop=True)
  # df.groupby('Date').apply(lambda p: p.nlargest(2, columns='population')).reset_index(level=['Date',1], drop=True)
        Date country  population
0 2019-12-31       C        1000
1 2019-12-31       A         100
2 2020-01-01       C        3500
3 2020-01-01       A         200
4 2020-02-01       D        2000
5 2020-02-01       E          54