gpt4 book ai didi

python - pandas:过滤 groupby 和/或 pivot?

转载 作者:行者123 更新时间:2023-12-01 09:41:40 24 4
gpt4 key购买 nike

我试图弄清楚如何使用 pandas 在组上下文中过滤大于/小于条件。

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

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

样本df:

╔═══════╦════════╦═══════╗║ Group ║ player ║ score ║╠═══════╬════════╬═══════╣║ a     ║      1 ║    10 ║║ a     ║      2 ║    20 ║║ a     ║      3 ║    29 ║║ a     ║      4 ║    22 ║║ a     ║      5 ║    14 ║║ b     ║      1 ║    16 ║║ b     ║      2 ║    16 ║║ b     ║      3 ║    17 ║║ c     ║      1 ║    22 ║║ c     ║      2 ║    23 ║║ c     ║      3 ║    22 ║║ d     ║      1 ║    13 ║║ d     ║      2 ║    13 ║║ d     ║      3 ║    23 ║║ d     ║      4 ║    13 ║║ d     ║      5 ║    34 ║║ e     ║      1 ║    32 ║║ e     ║      2 ║    29 ║║ e     ║      3 ║    28 ║║ e     ║      4 ║    19 ║║ e     ║      5 ║    19 ║║ e     ║      6 ║    27 ║║ f     ║      1 ║    47 ║║ f     ║      2 ║    17 ║║ f     ║      3 ║    14 ║║ f     ║      4 ║    25 ║║ g     ║      1 ║    67 ║║ g     ║      2 ║    21 ║║ g     ║      3 ║    27 ║║ g     ║      4 ║    16 ║║ g     ║      5 ║    14 ║║ g     ║      6 ║    25 ║╚═══════╩════════╩═══════╝

Output required:

╔═══════╦════════╦═══════╗║ Group ║ player ║ score ║╠═══════╬════════╬═══════╣║ a     ║      1 ║    10 ║║ a     ║      2 ║    20 ║║ a     ║      3 ║    29 ║║ a     ║      4 ║    22 ║║ a     ║      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 code as follow:

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

关于python - pandas:过滤 groupby 和/或 pivot?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59593420/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com