根据行数切片Pandas Dataframe

Mat*_*att 4 python slice dataframe pandas

我想这是相当简单的事情,但我找不到如何做到这一点.我一直在寻找教程和stackoverflow.

假设我有一个像这样的数据帧df:

Group   Id_In_Group   SomeQuantity
1        1              10
1        2              20
2        1               7
3        1              16
3        2              22
3        3               5
3        4              12
3        5              28
4        1               1
4        2              18
4        3              14
4        4               7
5        1              36
Run Code Online (Sandbox Code Playgroud)

我想只选择组中至少有4个对象的行(因此至少有4行具有相同的"组"编号),对于第4个对象的SomeQuantity,当通过提升SomeQuantity在组中排序时,大于20(例如).

例如,在给定的Dataframe中,它只返回第3组,因为它有4(> = 4)个成员,而它的第4个SomeQuantity(排序后)是22(> = 20),所以它应该构造数据帧:

Group   Id_In_Group   SomeQuantity
3        1              16
3        2              22
3        3               5
3        4              12
3        5              28
Run Code Online (Sandbox Code Playgroud)

(是否按SomeQuantity排序,无论如何).

有人可以帮助我吗?:)

Max*_*axU 5

我会用.groupby()+ .filter()方法:

In [66]: df.groupby('Group').filter(lambda x: len(x) >= 4 and x['SomeQuantity'].max() >= 20)
Out[66]:
   Group  Id_In_Group  SomeQuantity
3      3            1            16
4      3            2            22
5      3            3             5
6      3            4            12
7      3            5            28
Run Code Online (Sandbox Code Playgroud)

  • 最好不鼓励访问列作为属性,即使这在这种情况下有效,例如:`df.groupby('Group').filter(lambda x:len(x)> = 4和x ['SomeQuantity'] .max()> = 20)`+1仍然 (2认同)