ホームページ > バックエンド開発 > Python チュートリアル > Pandas DataFrame の各グループで最も頻度の高い値を見つける方法は?

Pandas DataFrame の各グループで最も頻度の高い値を見つける方法は?

Linda Hamilton
リリース: 2024-12-01 08:22:10
オリジナル
164 人が閲覧しました

How to Find the Most Frequent Value in Each Group of a Pandas DataFrame?

DataFrame 内の各グループに最も一般的な値を選択する

複数の文字列列を含むデータをクリーンアップするには、特定の列ごとに行をグループ化し、最も一般的な値を選択する必要があります。各グループ内の特定の列に共通の値。この記事では、強力な Pandas ライブラリを使用してこのタスクを実行する方法を説明します。

特定のエラー メッセージのコード修正

最初のクエリで提供されたコードにはいくつかのエラーが含まれており、以下で修正されています。

import pandas as pd

source = pd.DataFrame({
    'Country': ['USA', 'USA', 'Russia', 'USA'], 
    'City': ['New York', 'New York', 'Saint Petersburg', 'New York'],
    'Short Name': ['NY', 'New', 'Spb', 'NY']})

# Group by 'Country' and 'City' and calculate the most frequent 'Short Name' in each group
result = source.groupby(['Country', 'City'])['Short Name'].apply(lambda x: pd.Series.mode(x)[0][0])
ログイン後にコピー

説明

  1. 最新のものを使用してくださいSeries.mode: 元のコードは、statistics.mode を各グループに適用しようとしますが、複数のモードを適切に処理できず、エラーが発生する可能性があります。代わりに、より新しい pd.Series.mode 関数が使用され、すべてのモードの Series を明示的に返し、問題を解決します。
  2. 複数のモードを処理します:最も一般的な値が選択されると、コードは Series.mode によって返された Series から最初の要素を抽出します。これは、0 構文を使用して実現されます。

追加オプション

結果として DataFrame が優先される場合:

result = source.groupby(['Country', 'City'])['Short Name'].agg(pd.Series.mode).to_frame()
ログイン後にコピー

それぞれに別々の行が必要な場合mode:

result = source.groupby(['Country', 'City'])['Short Name'].apply(pd.Series.mode)
ログイン後にコピー

注: 任意のモード値を選択として受け入れる場合は、系列から最初のモードを抽出するラムダ関数を使用できます。 :

result = source.groupby(['Country', 'City'])['Short Name'].agg(lambda x: pd.Series.mode(x)[0])
ログイン後にコピー

以上がPandas DataFrame の各グループで最も頻度の高い値を見つける方法は?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート