適用と変換を使用して 2 つの列を減算し、平均を取得します
次のデータフレームを考えます:
df = pd.DataFrame({'A': ['foo', 'bar', 'foo', 'bar', 'foo', 'bar', 'foo', 'foo'],</p> <div class="code" style="position:relative; padding:0px; margin:0px;"><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 メソッドは異なる入力オブジェクトで動作するため、動作が異なります。
この入力の違いは、適用を使用してグループ全体で計算を実行できることを意味します。一方、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 サイトの他の関連記事を参照してください。