分组数据并检索具有最大计数值的行
要确定组内具有最大计数值的行,可以使用 groupby 操作pandas DataFrame。
考虑以下内容DataFrame:
Sp | Mt | Value | count |
---|---|---|---|
MM1 | S1 | a | 3 |
MM1 | S1 | n | 2 |
MM1 | S3 | cb | 5 |
MM2 | S3 | mk | 8 |
MM2 | S4 | bg | 10 |
MM2 | S4 | dgd | 1 |
MM4 | S2 | rd | 2 |
MM4 | S2 | cb | 2 |
MM4 | S2 | uyi | 7 |
示例 1:
我们的目标是识别每个组中的行(由 ['Sp', 'Mt'] 定义)最高计数值。在示例 1 中,我们有以下预期输出:
Sp | Mt | Value | count |
---|---|---|---|
MM1 | S1 | a | 3 |
MM1 | S3 | cb | 5 |
MM2 | S3 | mk | 8 |
MM2 | S4 | bg | 10 |
MM4 | S2 | uyi | 7 |
要实现此目的,我们可以首先获取每个组的最大计数值:
df.groupby(['Sp', 'Mt'])['count'].max()
这会产生:
Sp | Mt | |
---|---|---|
MM1 | S1 | 3 |
MM1 | S3 | 5 |
MM2 | S3 | 8 |
MM2 | S4 | 10 |
MM4 | S2 | 7 |
然后,提取原始 DataFrame 的索引,其中计数值等于每个索引中的最大值group:
idx = df.groupby(['Sp', 'Mt'])['count'].transform(max) == df['count'] df[idx]
这将产生所需的输出。
示例 2:
在示例 2 中,预期输出如下:
Sp | Mt | Value | count |
---|---|---|---|
MM2 | S4 | bg | 10 |
MM4 | S2 | cb | 8 |
MM4 | S2 | uyi | 8 |
在此场景中,MM4 组内有多行具有最大计数值(8)。使用与之前相同的方法,我们获得两行:
Sp | Mt | Value | count |
---|---|---|---|
MM2 | S4 | bg | 10 |
MM4 | S2 | cb | 8 |
MM4 | S2 | uyi | 8 |
更新:
如果目标是向 DataFrame 添加一个新列,指示每个组内的最大计数值,我们可以使用转换方法来计算每个组的值row:
df.groupby(['Sp', 'Mt'])['count'].max()
这将生成一个包含 count_max 列的 DataFrame,其中包含每个列的最大计数值组:
Sp | Mt | Value | count | count_max |
---|---|---|---|---|
MM1 | S1 | a | 3 | 3 |
MM1 | S1 | n | 2 | 3 |
MM1 | S3 | cb | 5 | 5 |
MM2 | S3 | mk | 8 | 8 |
MM2 | S4 | bg | 10 | 10 |
MM2 | S4 | dgd | 1 | 10 |
MM4 | S2 | rd | 2 | 7 |
MM4 | S2 | cb | 2 | 7 |
MM4 | S2 | uyi | 7 | 7 |
以上是如何在 Pandas 中查找组内具有最大计数值的行?的详细内容。更多信息请关注PHP中文网其他相关文章!