我试图弄清楚如何用熊猫在组上下文中过滤大于或小于条件的条件。
在样本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] 删除。
我来说两句