ホームページ  >  記事  >  バックエンド開発  >  groupbyグループ内の最大値を持つ行を取得するpandasメソッド

groupbyグループ内の最大値を持つ行を取得するpandasメソッド

不言
不言オリジナル
2018-04-20 13:38:464036ブラウズ

以下は、groupby グループ内の最大値を持つ行を取得するための pandas メソッドです。これは、優れた参考値を持っているので、皆さんのお役に立てれば幸いです。一緒に見てみましょう

groupbyグループ内の最大値の行を取得するpandasメソッド

例えば、以下のDataFrameでMtでグループ化されている場合、Countが最大の行を取り出します

import pandas as pd
df = pd.DataFrame({'Sp':['a','b','c','d','e','f'], 'Mt':['s1', 's1', 's2','s2','s2','s3'], 'Value':[1,2,3,4,5,6], 'Count':[3,2,5,10,10,6]})

df



Sp
0 3 s1 a 1
1 2 s1 b 2
2 5 s2 c 3
3 10 s2 d 4
4 10 s2 e 5
5 6 s3 f 6

方法 1: 次の行をフィルターします。グループ内で最大のカウント うーん


313d4410 s2e5メソッド2: 変換を使用して元のデータフレームのインデックスを取得します。そして、必要な行をフィルターで除外します価値1


s1 0
s1 a

s2

10
s2
df.groupby('Mt').apply(lambda t: t[t.Count==t.Count.max()])
print df.groupby(['Mt'])['Count'].agg(max)

idx=df.groupby(['Mt'])['Count'].transform(max)
print idx
idx1 = idx == df['Count']
print idx1

df[idx1]
Count Mt Sp
0 3 s1 a

310

s2

d

4

4


10

s2 えf6 上記のメソッドの問題は、行 3 と行 4 の値がすべて最大値であるため、複数の行が返されることです。1 行だけが返された場合はどうなるでしょうか。 ? 方法 3: idmax (パンダの古いバージョンは argmax)Value03s1a1

5
5 6 s3
Mt
s1 3
s2 10
s3 6
Name: Count, dtype: int64
0 3
1 3
2 10
3 10
4 10
5 6
dtype: int64
0 True
1 False
2 False
3 True
4 True
5 True
dtype: bool
idx = df.groupby('Mt')['Count'].idxmax()
print idx
カウント Mt Sp

310s2

d

4

5

6


s3

f 61 310s2d4

レア
Sp
0 3 s1 a

5

6

s3

f6りーりーMtValue0s113s245s36

方法 4: まず並べ替えて、各グループから最初のものを取り出します

df.iloc[idx]
Mt
s1 0
s2 3
s3 5
Name: Count, dtype: int64

MtCountSp価値0110

s1 3 a
1 s2
d

4

2

s3

6


f

6 次に、最大値の行、たとえば中間値の行を抽出したくない場合はどうすればよいでしょうか。 考え方はまだ似ていますが、特定の書き込みメソッドでいくつかの変更が必要な場合があります。たとえば、メソッド 1 と 2 は max アルゴリズムを変更する必要があり、メソッド 3 はインデックスを返すメソッドを実装する必要があります。 とにかく、groupby の後、各グループはデータフレームになります。 関連する推奨事項: pandas+dataframe は行と列の選択とスライス操作を実装しますPython データ処理ライブラリ pandas 入門

以上がgroupbyグループ内の最大値を持つ行を取得するpandasメソッドの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。