如何在筛选后找到带有 pandas 的列的最小最大值?

问题描述 投票:0回答:2

我有一个数据框:

import pandas as pd
df = pd.DataFrame(
    {'team': ['A', 'A', 'A', 'A', 'B', 'B', 'B', 'B'],
     'variable': [8, 9, 10, 11, 2, 3, 4, 5],
     'another_variable': [1, 1, 1, 2, 1, 1, 2, 2]}
)

我想找到

variable
(向上计数)的最大值,其中
another_variable
仍然等于 1.

我可以对数据框进行分组并过滤相关行:

df.groupby(['team']).apply(lambda g: g[g['another_variable'] == 1])

# Output:
#       team    variable    another_variable
#team               
#A  0   A       8           1
#   1   A       9           1
#   2   A       10          1
#B  4   B       2           1
#   5   B       3           1

但是如果我添加

.variable.min()
,我只会得到一个值,而不是每组一个值(然后我可以计算出最大值)。我做错了什么?

python pandas group-by max min
2个回答
2
投票

先过滤,再过滤

groupby

df[df['another_variable'].eq(1)].groupby('team')['variable'].max()

输出:

team
A    10
B     3
Name: variable, dtype: int64

如果一个组可能没有 1 而你想要

NaN
,那么使用:

df['variable'].where(df['another_variable'].eq(1)).groupby(df['team']).max()

如果

1
中没有
A
的例子:

team
A   NaN
B     3
Name: variable, dtype: int64

0
投票

以下似乎是 Mozway 已经提出的变体:

import pandas as pd

df = pd.DataFrame(
    {'team': ['A', 'A', 'A', 'A', 'B', 'B', 'B', 'B'],
     'variable': [8, 9, 10, 11, 2, 3, 4, 5],
     'another_variable': [1, 1, 1, 2, 1, 1, 2, 2]}
)

s = (df.groupby(['team', 'another_variable'])['variable']
       .max()
       .reset_index(['team', 'another_variable'])
       )

print( s[s['another_variable']==1] )
  team  another_variable  variable
0    A                 1        10
2    B                 1         3
© www.soinside.com 2019 - 2024. All rights reserved.