熊猫:过滤groupby和/或透视?

登上月球的人类

我试图弄清楚如何用熊猫在组上下文中过滤大于或小于条件的条件。

在样本df中,有7个组(a,b,c,d,e,f,g)。每个小组有1至6名玩家。是否可以过滤掉玩家1在9-20之间得分的组?然后显示玩家1得分在9-20之间的小组(如输出所示)?

ps。原始的df更大,有超过10个玩家的组和其他具有可变值的列。

样本df:

玩家得分║ ╬═══════╣ 
║一个║1║10║ 
║一个║2║20║ 
║一个║3║29║ 
║一个║4║22║ 
║一个║5║14║ 
║b║1║16 ║ 
║b║2║16║ 
║b║3║17║ 
║ç║1║22║ 
║ç║2║23║ 
║ç║3║22║ 
║d║1║13║ 
║d║2║13║ 
║d║3║23║ 
║d║4║13║ 
║d║5║34║ 
║ë║1║32║  
║ë║2║29║
║ë║3║28║
║Ë║4║19║ 
║Ë║5║19║ 
║Ë║6║27║ 
║˚F║1║47║ 
║˚F║2║17║ 
║˚F║3║14║ 
║˚F║4║25║ 
║克║1║67║ 
║克║2║21║ 
║克║3║27║ 
║克║4║16║ 
║克║5║14║ 
║克║6║25║ 
╚═══════╩ ════════牛皮═══════╝

需要的输出:

玩家得分║ ╬═══════╣ 
║一个║1║10║ 
║一个║2║20║ 
║一个║3║29║ 
║一个║4║22║ 
║一个║5║14║ 
║b║1║16 ║ 
║b║2║16║ 
║b║3║17║ 
║d║1║13║ 
║d║2║13║ 
║d║3║23║ 
║d║4║13║ 
║d║5║34║ 
╚═══════牛皮════════牛皮═══════╝

df代码如下:

data = {'Group':['a','a','a','a','a','b','b','b','c','c','c','d','d','d','d','d',
'e','e','e','e','e','e','f','f','f','f','g','g','g','g','g','g'],
'players':[1,2,3,4,5,1,2,3,1,2,3,1,2,3,4,5,1,2,3,4,5,6,1,2,3,4,1,2,3,4,5,6],
'score':[10,20,29,22,14,16,16,17,22,23,22,13,13,23,13,34,32,29,28,19,19,27,47,17,14,25,67,21,27,16,14,25,]}

非常感谢

亚力山大

查找满足条件的组,然后使用isin筛选这些组中包含的数据。

df = pd.DataFrame(data)

groups_filter = (
    df[df['players'].eq(1) 
       & df['score'].ge(9) 
       & df['score'].le(20)
      ]['Group'].unique()
)
>>> df[df['Group'].isin(groups_filter)]
   Group  players  score
0      a        1     10
1      a        2     20
2      a        3     29
3      a        4     22
4      a        5     14
5      b        1     16
6      b        2     16
7      b        3     17
11     d        1     13
12     d        2     13
13     d        3     23
14     d        4     13
15     d        5     34

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章