ホームページ >バックエンド開発 >Python チュートリアル >Pandas DataFrame で 2 つの列を減算して平均を計算する場合、「apply」と「transform」はどのように異なりますか?

Pandas DataFrame で 2 つの列を減算して平均を計算する場合、「apply」と「transform」はどのように異なりますか?

Barbara Streisand
Barbara Streisandオリジナル
2024-11-26 20:28:11690ブラウズ

How do `apply` and `transform` differ when subtracting two columns and calculating the mean in a Pandas DataFrame?

適用と変換を使用して 2 つの列を減算し、平均を取得します

次のデータフレームを考えます:

df = pd.DataFrame({'A': ['foo', 'bar', 'foo', 'bar', 'foo', 'bar', 'foo', 'foo'],</p>
<pre class="brush:php;toolbar:false">               'B': ['one', 'one', 'two', 'three', 'two', 'two', 'one', 'three'],
               'C': np.random.randn(8), 'D': np.random.randn(8)})

 A      B         C         D

0 foo 1 0.162003 0.087469
1 bar 1 -1.156319 -1.526272
2 フーツー0.833892 -1.666304
3 バー 3 -2.026673 -0.322057
4 フー 2 0.411452 -0.954371
5 バー 2 0.765878 -0.095968
6 フー 1 -0.654890 0.678091
7 foo three -1.789842 -1.130922

適用と変換

次のコマンドはラムダ関数を適用しますの各グループにdataframe:

df.groupby('A').apply(lambda x: (x['C'] - x['D']))

これは、元のデータフレームと同じ形状のデータフレームを返します。各セルには、対応するグループに適用されたラムダ関数の結果が含まれます。

次のコマンドは、データフレーム内の各グループ:

df.groupby('A').transform(lambda x: (x['C'] - x['D']).mean())

これは、元のデータフレームと同じ形状の系列を返します。各セルには、対応するグループの列 C と D の違い。

異なるコマンドが機能する理由

apply メソッドとtransform メソッドは異なる入力オブジェクトで動作するため、動作が異なります。

  • apply は、グループ全体を DataFrame として暗黙的にラムダに渡します。関数。
  • transform は、グループ内の各列をシリーズとしてラムダ関数に個別に渡します。

この入力の違いは、適用を使用してグループ全体で計算を実行できることを意味します。一方、transform は個々の列で計算を実行するためにのみ使用できます。

次のコマンドを使用して単一の値を返します。 transform

transform に渡されるラムダ関数は、グループごとに 1 つの値を返す必要があることに注意することが重要です。ラムダ関数が DataFrame、Series、またはその他の非スカラー値を返す場合、エラーが発生します。

これが、次のコマンドが失敗する理由です。

df.groupby('A').transform(lambda x: (x['C'] - x['D']))

ラムダ関数は単一ではない DataFrame を返します。 value.

結論

apply と transform は、データフレームに対して groupby 操作を実行するために使用できる 2 つの強力なメソッドです。これら 2 つの方法を効果的に使用するには、その違いを理解することが重要です。

以上がPandas DataFrame で 2 つの列を減算して平均を計算する場合、「apply」と「transform」はどのように異なりますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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