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