ホームページ >バックエンド開発 >Python チュートリアル >Pandas DataFrame グループで最も一般的な値を効率的に見つけるにはどうすればよいですか?

Pandas DataFrame グループで最も一般的な値を効率的に見つけるにはどうすればよいですか?

Linda Hamilton
Linda Hamiltonオリジナル
2024-11-29 11:32:15336ブラウズ

How to Efficiently Find the Most Common Value in a Pandas DataFrame Group?

GroupBy pandas DataFrame と最も一般的な値の選択

問題


複数の文字列列を含むデータ フレームがあるとします。最初の 2 つの列の各組み合わせでは、3 番目の列に有効な値が 1 つだけ含まれている必要があります。データ フレームを最初の 2 列でグループ化し、組み合わせごとに 3 番目の列の最も一般的な値を選択することで、一貫してデータをクリーンアップする必要があります。

次のコードは、これを達成する試み:


pandas as pd<br>from scipy import stats</p>
<p>source = pd.DataFrame({</p>
<pre class="brush:php;toolbar:false">'Country': ['USA', 'USA', 'Russia', 'USA'], 
'City': ['New-York', 'New-York', 'Sankt-Petersburg', 'New-York'],
'Short name': ['NY', 'New', 'Spb', 'NY']})

source.groupby([' Country','City']).agg(lambda x: stats.mode(x['短いname'])[0])

しかし、コードの最後の行が KeyError で失敗します。これを修正するにはどうすればよいですか。問題?

解決策


Pandas>= 0.16


Pandas バージョン 0.16 の場合その後、次を使用しますコード:


source.groupby([' Country','City'])['Short name'].agg(pd.Series.mode)

このコードは、Pandas 0.16 で導入された pd.Series.mode 関数を使用して、最も一般的な値を見つけます

複数のモードを処理するための代替案


Series.mode 関数は、複数のモードのケースを処理します。実質的に:



  • 複数のモードがある場合は、Series を返します。すべてのモードが含まれています。

  • モードごとに個別の行が必要な場合は、GroupBy.apply(pd.Series.mode)を使用します。 /li>
  • いずれかのモードが必要な場合は、次を使用しますGroupBy.agg(lambda x: pd.Series.mode(x)[0]).

< h4>の代替案

Python から統計情報.mode を使用することもできますが、複数のモードを適切に処理できないため、StatisticsError が発生する可能性があります。したがって、これはお勧めできません。

以上がPandas DataFrame グループで最も一般的な値を効率的に見つけるにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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